力扣(LeetCode)922

題目地址:
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;
    }
}
相關文章
相關標籤/搜索