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:
2 <= A.length <= 20000
A.length % 2 == 0
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 }
原文地址:https://www.cnblogs.com/taste-it-own-it-love-it/p/10673114.html
时间: 2024-10-07 23:29:14