37. 调整数组顺序使奇数位于偶数前面
2019-08-07 本文已影响0人
HamletSunS
题目:
要求奇数和奇数之间、偶数和偶数之间相对位置不变
思路:
若要求相对位置不变:
- 申请新的数组空间,在偶数保存下来,再拼接上,应该没别的办法了
若不要求相对位置不变: - 碰撞指针法,一个从头向尾走,一个从尾向头走,若前指针指向偶数则停止前进,后指针指向奇数停止前进,两个指针指向的内存交换一下,然后继续
- 索引表示法,设置两个指针p1,p2。p1代表奇数应该放的位置(数组头部),p2用来遍历数组,若p2指向的是奇数,则p2与p1指向的内容交换,p1++,若p2指向的是偶数,直接跳过,继续遍历下一个元素
拓展:
如何让程序具有更好的可扩展性?即改变成别的条件也可以让程序实现功能?
考虑传入一个函数参数,用作判断标准。
代码:
class Solution {
public:
void reOrderArray(vector<int> &array) {
int n=array.size();
if(n<2)
return ;
vector<int> odd;
int cur=0;
for(int i=0;i<n;++i){
if(array[i]%2){
array[cur++]=array[i];
}
else
odd.push_back(array[i]);
}
for(int i=0;i<odd.size();i++)
array[cur++]=odd[i];
}
};