(java)leetcode922 將陣列按奇偶性分類(保證陣列值的奇偶性和下標的奇偶性一致)(Sort Array By Paity Ⅱ)
阿新 • • 發佈:2018-11-01
題目描述:
給定非負整數陣列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; } }
本人才疏學淺,文中若有錯誤或有更好的方法,歡迎在評論中指出,共同進步。