1. 程式人生 > >劍指offer題目描述 輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

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

牛客網劍指offer線上程式設計:

方法一:利用兩個指標,實現了是陣列奇數在前偶數在後,但通過不了測試用例,因為改變了奇數和奇數,偶數和偶數之間的相對位置

class Solution {

public:
    void reOrderArray(vector<int> &array) 
    {
        vector<int>::iterator it1,it2;
        it1=array.begin();
        it2=array.end();
        while(it1<it2)
        {
            while(it1<it2&&(*it1&0x1)==1)
                it1++;
           while(it1<it2&&(*it2&0x1)==0)
                it2--;
                if(it1<it2)
                {
                    int temp=*it1;
                     *it1=*it2;
                     *it2=temp;
                }
        } 
    }

};

方法二:建一個臨時陣列,第一次迴圈是奇數就放進去,第二次迴圈放偶數,空間複雜度高,通過測試用例

class Solution {
public:
    void reOrderArray(vector<int> &array) 
    {
        vector<int>::iterator it;
        vector<int> array_temp;
 
        for(it=array.begin();it!=array.end();it++)
        {
            if((*it&0x1)==1)
               array_temp.push_back(*it);
            
                
        }
        for(it=array.begin();it!=array.end();it++)
        {
            if((*it&0x1)==0)
               array_temp.push_back(*it);
            
                
        }
        array=array_temp;
        
       
    }
};