1. 程式人生 > >(java)leetcode922 將陣列按奇偶性分類(保證陣列值的奇偶性和下標的奇偶性一致)(Sort Array By Paity Ⅱ)

(java)leetcode922 將陣列按奇偶性分類(保證陣列值的奇偶性和下標的奇偶性一致)(Sort Array By Paity Ⅱ)

題目描述:

給定非負整數陣列A,A中一半是偶數,一半是奇數。

對陣列進行排序, 若 A[i] 是偶數,則 i 是偶數;若 A[i] 是奇數,則 i 是奇數。

你可以返回任意一種結果。

示例: 

Input: [4,2,5,7]
Output: [4,5,2,7]
Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] 都是正確輸出.

解題思路:

本題我一開始想到的也是比較暴力的方法,首先新建一個與原陣列大小相同的陣列,然後去遍歷原陣列,如果值為偶數,則存入到新陣列中下標為偶數的位置,否則儲存到下標為奇數的位置。

第二種方法是直接在原陣列中進行操作。分別從奇數下標(e=1)和偶數下標(o=0)開始遍歷這個陣列,若偶數下標的值不滿足條件,即它的值是奇數,則把它的值和奇數下標(e)的值互換,這樣保證了這個奇數下標(e)的值是正確的,則 e=e+2,跳到下一個奇數下標;若偶數下標(o)滿足條件,則 o=o+2 ,跳到下一個偶數下標,如此迴圈,調整好每一個數。(不知道有沒有描述清楚,有疑問可留言)

程式碼實現(java):

暴力法:

class Solution {
    public int[] sortArrayByParityII(int[] A) {
        int[] Newint=new int[A.length];
        for(int i=0,m=0,n=1;i<A.length;i++){
            if(A[i]%2==0){
                Newint[m]=A[i];
                m+=2;
            }
            else{
                Newint[n]=A[i];
                n+=2;
            }
                
                
        }
        
        return Newint;
    }
}

交換法:

class Solution {
   public int[] sortArrayByParityII(int[] A) {
        int e = 0;
        int o = 1;
        
        while(e < A.length && o < A.length) {
            if(A[e]%2 != 0) {
                swap(A, e, o);
                o += 2;
            } else {
                e += 2;
            }
        }

        return A;
    }
    
    public void swap(int[] A, int e,int o){
        int temp=A[e];
        A[e]=A[o];
        A[o]=temp;
    }
}

本人才疏學淺,文中若有錯誤或有更好的方法,歡迎在評論中指出,共同進步。