码迷,mamicode.com
首页 > 其他好文 > 详细

Sort Array By Parity II LT922

时间:2019-04-08 21:40:00      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:http   bee   owa   int   htm   ret   idea   poi   vat   

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

标签:http   bee   owa   int   htm   ret   idea   poi   vat   

原文地址:https://www.cnblogs.com/taste-it-own-it-love-it/p/10673114.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!