LeetCode 922 按奇偶排序数组II

LeetCode 922 按奇偶排序数组II

问题描述:
给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。
你可以返回任何满足上述条件的数组作为答案。
示例

  • 输入:[4,2,5,7]
  • 输出:[4,5,2,7]
  • 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

双指针

  • 若当前 i 指向数字满足 A[i]%2==i%2 ,则继续向下遍历
  • 若 A[i]%2!=i%2 ,则使用 j 从 i+1 开始向后寻找第一个满足 A[j]%2==i%2 的位置
  • 替换 A[i]、A[j] ,继续使用 i 向后遍历

执行用时:10 ms, 在所有 Java 提交中击败了7.32%的用户
内存消耗:39.9 MB, 在所有 Java 提交中击败了81.19%的用户

class Solution {
    public int[] sortArrayByParityII(int[] A) {
        int i = 0, j = 0, tmp = 0;
        while(i<A.length) {
            if(i%2==A[i]%2) {
                i++;
                continue;
            }

            j = i+1;
            while(j<A.length) {
                if(A[j]%2==i%2) {
                    tmp = A[i];
                    A[i] = A[j];
                    A[j] = tmp;
                    break;
                }
                j++;
            }
            
            i++;
        }

        return A;
    }
}
posted @ 2020-11-12 09:25  CodeSPA  阅读(121)  评论(0编辑  收藏  举报