美文网首页
37. 调整数组顺序使奇数位于偶数前面

37. 调整数组顺序使奇数位于偶数前面

作者: HamletSunS | 来源:发表于2019-08-07 16:31 被阅读0次

题目:
要求奇数和奇数之间、偶数和偶数之间相对位置不变

思路:
若要求相对位置不变:

  • 申请新的数组空间,在偶数保存下来,再拼接上,应该没别的办法了
    若不要求相对位置不变:
  • 碰撞指针法,一个从头向尾走,一个从尾向头走,若前指针指向偶数则停止前进,后指针指向奇数停止前进,两个指针指向的内存交换一下,然后继续
  • 索引表示法,设置两个指针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];
        
    }
};

相关文章

网友评论

      本文标题:37. 调整数组顺序使奇数位于偶数前面

      本文链接:https://www.haomeiwen.com/subject/pufadctx.html