劍指offer之將偶數置於奇數的前面

題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

解題思路:重新創建一個新數組,然後順序遍歷原數組,找出其中的奇數,然後將其尾插到新數組,然後再次順序遍歷原數組,找出其中的偶數,然後再順序尾插到新數組,最後將新數組賦給原數組。

代碼示例如下:

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;
        */
        ////////////////////////////////////////////////////////
    }
};

測試結果如下:
牛客網測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章