Sort Array By Parity II LT922

Posted taste-it-own-it-love-it

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sort Array By Parity II LT922相关的知识,希望对你有一定的参考价值。

Given an array A of non-negative integers, half of the integers in A are odd, and half of the integers are even.

Sort the array so that whenever A[i] is odd, i is odd; and whenever A[i] is even, i is even.

You may return any answer array that satisfies this condition.

 

Example 1:

Input: [4,2,5,7]
Output: [4,5,2,7]
Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.

Note:

  1. 2 <= A.length <= 20000
  2. A.length % 2 == 0
  3. 0 <= A[i] <= 1000

Idea 1. Similar to Sort Array By Parity LT905, assume the array is in the order, what to do with next element?

Time complexity: O(n)

Space complexity: O(1)

 1 class Solution {
 2     private void swap(int[] A, int i, int j) {
 3         int temp = A[i];
 4         A[i] = A[j];
 5         A[j] = temp;
 6     }
 7     public int[] sortArrayByParityII(int[] A) {
 8         for(int even = 0, odd = 1; even< A.length; even += 2) {
 9             if(A[even]%2 == 1) {
10                 while(odd < A.length && A[odd]%2 == 1) {
11                     odd += 2;
12                 }
13                 swap(A, even, odd);
14             }
15         }
16         
17         return A;
18     }
19 }
 1 class Solution {
 2     private void swap(int[] A, int i, int j) {
 3         int temp = A[i];
 4         A[i] = A[j];
 5         A[j] = temp;
 6     }
 7     public int[] sortArrayByParityII(int[] A) {
 8         for(int even = 0, odd = 1; even < A.length; even +=2) {
 9            if((A[even]&1) == 1) {
10                while((A[odd]&1) == 1) {
11                    odd += 2;
12                }
13                swap(A, even, odd);
14            }
15         }
16         
17         return A;
18     }
19 }

Idea 1.a two pointers walking towards each other

 1 class Solution {
 2     private void swap(int[] A, int i, int j) {
 3         int temp = A[i];
 4         A[i] = A[j];
 5         A[j] = temp;
 6     }
 7     public int[] sortArrayByParityII(int[] A) {
 8         for(int even = 0, odd = 1; odd < A.length && even < A.length;) {
 9             if(A[even]%2 == 1&& A[odd]%2 == 0) {
10                 swap(A, even, odd);
11             }
12             if(A[even]%2 == 0) {
13                 even +=2;
14             }
15             if(A[odd]%2 == 1) {
16                 odd += 2;
17             }
18         }
19         
20         return A;
21     }
22 }

 

 use a&1 == 1 instead of a%2 == 1 to check parity 

 1 class Solution {
 2     private void swap(int[] A, int i, int j) {
 3         int temp = A[i];
 4         A[i] = A[j];
 5         A[j] = temp;
 6     }
 7     public int[] sortArrayByParityII(int[] A) {
 8         for(int even = 0, odd = 1; odd < A.length && even < A.length; ) {
 9             if((A[even]&1) == 1 && (A[odd]&1) == 0) {
10                 swap(A, even, odd);
11             }
12             if((A[even]&1) == 0) {
13                 even += 2;
14             }
15             if((A[odd]&1) == 1) {
16                 odd += 2;
17             }
18         }
19         
20         return A;
21     }
22 }

 

以上是关于Sort Array By Parity II LT922的主要内容,如果未能解决你的问题,请参考以下文章

LEETCODE42922. Sort Array By Parity II

[LeetCode] 922. Sort Array By Parity II

Sort Array By Parity II LT922

leetcode922 Sort Array By Parity II

LeetCode 922. Sort Array By Parity II (按奇偶排序数组 II)

LeetCode 922 Sort Array By Parity II 解题报告