題目:調整數組順序使奇數位於偶數前面
題目描述
輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
解題思路:
由於要保證奇數和奇數,偶數和偶數之間的相對位置不變,所以不能採用劍指 offer中的定義前後兩個指針。
自己的思路,有點low,但是時間和空間的複雜度均爲O(n),以後有好的方法會進行更新。
整體思路:
首先統計奇數的個數,然後新建一個等長數組,定義兩個指針,奇數角標從0開始,偶數角標int startEven=odd+1; 往裏面填數。
代碼實現:
public class Solution {
public void reOrderArray(int [] array) {
//先記錄奇數的個數
int odd=0;
for(int a:array) {
if(a%2==0) {
odd++;
}
}
//新建一個數組,調整數組順序使奇數位於偶數前面,偶數從odd開始
if(odd<array.length){
int [] temp=new int[array.length];
int startOdd=0;
int startEven=odd+1;
for(int a:array) {
if(a%2==0) {
//該數爲偶數
temp[startEven++]=a;
}else {
//該數爲奇數
temp[startOdd++]=a;
}
}
//將結果傳回原數組
for(int i=0;i<temp.length;i++){
array[i]=temp[i];
}
}
}
}