xiwenAndlejian / my-blog

Java基础学习练习题
1 stars 0 forks source link

905. 按奇偶排序数组 #32

Open xiwenAndlejian opened 5 years ago

xiwenAndlejian commented 5 years ago

905. 按奇偶排序数组

思路

输入:数组A为一个非负整数数组。

返回:返回数组元素和A一致,且偶数元素排列在奇数元素之前。

解题

使用双指针,把数组前半部分(指偶数部分,而非元素个数的一半)中的奇数元素,与后半部分偶数元素对掉即可。

public int[] sortArrayByParity(int[] A) {
    int l = 0;
    int r = A.length - 1;
    while (l < r) {
        while (l < r && isOdd(A[l])) {
            l++;
        }
        while (r > l && !isOdd(A[r])) {
            r--;
        }
        if (r <= l) {
            break;
        }
        A[l] ^= A[r];
        A[r] ^= A[l];
        A[l] ^= A[r];
    }
    return A;
}

public static boolean isOdd(int num) {
    return (num & 1) == 0;
}