1. 程式人生 > >《劍指offer》 調整數組順序使得奇數在偶數前面

《劍指offer》 調整數組順序使得奇數在偶數前面

移動 urn void array col result 輸入 函數 整數

本題來自《劍指offer》 調整數組順序使得奇數在偶數前面

題目:

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

思路:

  假設程序功能是黑盒子,現在考慮輸入和輸出。

  輸入:【1,2,3,4,5,6】,數組為空,只有一個元素

  輸出:題目要求相對位置不變,【1,3,5,2,4,6】代碼一實現,需要借助輔助內存。

     若位置可以變,【1,5,3,4,2,6】 代碼二實現,前後指針遍歷,前面的偶數和後面的奇數互換即可

C++ Code(2):

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        vector<int> result;
        int left = 0;
        int right = array.size()-1;
        int temp;
        while (left<right){
            while ((left<right)&& !isEven(array[left])){    //
前指針向後移動直到遇到奇數 left++; } while((left<right)&& isEven(array[right])){ //後指針向前移動直到遇到偶數 right--; } if (left<right){ //走到這一步,說明前指向了偶數,後指針指向了奇數 temp = array[left]; array[left]
= array[right]; array[right] = temp; } } } bool isEven(int num){ //判斷奇偶數 return (num&1)==0; } };

C++ Code(1):

class Solution {
public:
    void reOrderArray(vector<int> &array) {
         vector<int> result;
        int num=array.size();
        for(int i=0;i<num;i++)
            {
            if(array[i]%2==1)
                result.push_back(array[i]);
        }
        for(int i=0;i<num;i++)
            {
            if(array[i]%2==0)
                result.push_back(array[i]);
        }
        array=result;
    }
};

總結:

《劍指offer》 調整數組順序使得奇數在偶數前面