题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:重新创建一个新数组,然后顺序遍历原数组,找出其中的奇数,然后将其尾插到新数组,然后再次顺序遍历原数组,找出其中的偶数,然后再顺序尾插到新数组,最后将新数组赋给原数组。
代码示例如下:
class Solution {
public:
void reOrderArray(vector<int> &arr)
{
vector<int> newarr;
int i = 0;
int j = 0;
for(; i < arr.size(); i++)
{
if(arr[i] % 2 == 1)
{
newarr.push_back(arr[i]);
}
}
while( j < arr.size())
{
if(arr[j] % 2 == 0)
{
newarr.push_back(arr[j]);
}
j++;
}
arr = newarr;
///
/*
int i = 0;
int j = arr.size() - 1;
int tmp = arr[i];
while(i < j)
{
while(i < j && (arr[j] % 2 == 0))
{
j--;
}
if(i < j)
{
arr[i] = arr[j];
}
while(i < j && (arr[i] % 2 == 1))
{
i++;
}
if(i < j)
{
arr[j] = arr[i];
}
}
arr[i] = tmp;
*/
}
};
测试结果如下: