本题为百度内推面试题
给一个数组,让数组的奇数位(1,3,5,7…)上放奇数,让数组的偶数位(0,2,4,6,…)上放偶数。
我的思想:
给两个指针,i=0,j=1。用这两个指针来监控数字的奇偶。如果arr[i]是偶数,那么这个位置不变,跳向下一个偶数位i+=2。如果arr[j]是奇数,那么这个位置不变,跳向下一个奇数位j+=2。如果(i < len&&j < len) 说明偶数位为奇数,奇数位为偶数,那么就将这两个位置的元素交换。
class Solution {
public:
void oddInOddEvenInEven(vector<int>& arr, int len){
int i = 0;
int j = 1;
while (i < len&&j < len)
{
while (i < len&&arr[i] % 2 == 0) //判断arr[i]是否为偶数
i += 2;
while (j < len&&arr[j] % 2 == 1) //判断arr[j]是否为奇数
j += 2;
if (i < len&&j < len)
{
// swap(arr[i],arr[j]);
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
};
int main()
{
Solution s;
vector<int> arr;
int a = 0;
while(cin >> a)
{
arr.push_back(a);
if (cin.get() == '\n')//如果是回车符则跳出循环
break;
}
int len = arr.size();
s.oddInOddEvenInEven(arr,len);
for (vector<int>::iterator itr = arr.begin(); itr != arr.end(); ++itr)
{
cout << *itr <<" ";
}
system("pause");
return 0;
}程序运行及结果:
版权声明:本文为qq_40704847原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。