題目地址:
https://leetcode-cn.com/probl...
題目描述:
給定一個非負整數數組 A, A 中一半整數是奇數,一半整數是偶數。java
對數組進行排序,以便當 A[i] 爲奇數時,i 也是奇數;當 A[i] 爲偶數時, i 也是偶數。數組
你能夠返回任何知足上述條件的數組做爲答案。指針
示例:code
輸入:[4,2,5,7]
輸出:[4,5,2,7]
解釋:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也會被接受。排序
解答:
這一題雖然是排序,可是其實是把奇數放在奇數下標的地方,偶數放在偶數下標的地方便可,而不須要
使得數組有序的關係。所以使用雙指針,i爲偶數指針,j爲奇數指針。只要i的位置爲偶數,i指針就後移
兩步,只要j的位置爲奇數,j指針就後移兩布,若是它們任意到達邊界就退出循環,不然交換兩個指針對
應地址的值。
須要注意的是i的邊界是數組長度-2,而j的邊界是數組長度-1。
java ac代碼:leetcode
class Solution { public int[] sortArrayByParityII(int[] A) { int i = 0,j = 1; while(true) { while(i <= A.length-2&&(A[i]&1)==0)i+=2; if(i > A.length-2)break; while(j <= A.length-1&&(A[j]&1)==1)j+=2; if(j > A.length-1)break; int temp = A[i]; A[i] = A[j]; A[j] = temp; } return A; } }