劍指Offer-13.調整數組順序使奇數位於偶數前面(C++/Java)

題目:

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

分析:

這道題作法有不少,首先能夠建立一個新的數組,遍歷原數組兩遍,先把奇數依次傳入新數組中,再把偶數傳入進去,這樣能夠保持數字的相對位置不變。函數

固然若是不須要額外空間的話,也能夠在原數組上進行操做,能夠從後往前遍歷數組,將偶數依次放置數組尾部,並把以前的元素依次向前移動,固然也能夠從前遍歷先找到一個偶數,再找到這個偶數後面的第一個奇數,將奇數放置在偶數的位置,這兩個數中間的全部元素(包括偶數)依次向後移動,總之題目須要保持相對位置不變,只可以將多個元素依次移動,或者相鄰兩個元素交換。spa

若是去掉保持相對位置這一條件,只須要使用頭尾指針,將偶數和奇數直接交換便可。指針

程序:

C++code

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

Javablog

public class Solution { public void reOrderArray(int [] array) { int count = 0; for(int i = array.length-1; i >= 0; --i){ if((array[i] & 1) == 0){ int temp = array[i]; for(int j = i; j < array.length - 1 - count; ++j){ array[j] = array[j+1]; } array[array.length - 1 - count] = temp; count++; } } } }
相關文章
相關標籤/搜索