13.調整數組順序使奇數位於偶數前面【代碼的完整性】

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

       思路一:借用vector輔助空間,時間複雜度爲O(n),空間複雜度爲O(n)。

class Solution{
public:
    void reOrderArray(vector<int> &array){
        int odd_count = 0;
        for (int i = 0; i < array.size(); ++i){
            if (array[i] % 2){
                ++odd_count;
            }
        }
        int odd_idx = 0;
        int eve_idx = odd_count;
        vector<int> arr_temp(array.size());
        for (int i = 0; i < array.size(); ++i){
            if (array[i] % 2){
                arr_temp[odd_idx++] = array[i];
            }
            else{
                arr_temp[eve_idx++] = array[i];
            }
        }
        array = arr_temp;
    }
};

       思路二:尾插,刪除之後,其實vector內部的代碼實現是把後面的所有數據都往前移動,時間複雜度爲O(n^2),空間複雜度爲O(1)。

class Solution{
public:
    void reOrderArray(vector<int> &array){
        int temp;
        int size = array.size();
        vector<int>::iterator arr_beg = array.begin();
        while (size){
            if (*arr_beg % 2 == 0){
                temp = *arr_beg;
                arr_beg = array.erase(arr_beg);
                array.push_back(temp);
            }
            else{
                ++arr_beg;
            }
            --size;
        }
    }
};

       或者:

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        int s = array.size();
        for (int i = 0; i < s; ++i){
            if (array[i] % 2 == 0){
                array.push_back(array[i]);
                array.erase(array.begin() + i);
                i--;
                s--;
            }
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章