劍指 offer之調整數組順序使奇數位於偶數前面_java

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

解題思路:
由於要保證奇數和奇數,偶數和偶數之間的相對位置不變,所以不能採用劍指 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];
        }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章