题目:
我的解法一:双端队列
思路:用两个双端队列分别存储奇数和偶数,然后依次取一个
class Solution {
public int[] sortArrayByParityII(int[] A) {
Deque<Integer> odd_stack = new LinkedList<Integer>();
Deque<Integer> even_stack = new LinkedList<Integer>();
for (int a: A){
if(a%2==0){
even_stack.add(a);
}else{
odd_stack.add(a);
}
}
int d = A.length;
int[] result = new int[d];
for(int i=0; i<d; i++){
if(i%2==0){
result[i] = even_stack.poll();
}else{
result[i] = odd_stack.poll();
}
}
return result;
}
}
我的解法二:双指针
思路:一个指针代表奇数的位置,一个指针代表偶数的位置,依次放入奇数或偶数指针处对应的值,然后更新奇数或偶数指针到下一个奇数或偶数。
class Solution {
public int[] sortArrayByParityII(int[] A) {
int d = A.length;
int[] result = new int[d];
int odd_point = 0;
int even_point = 0;
for(int i=0; i<d; i++){
if(i%2==1){
for(int j=odd_point; j<d; j++){
if(A[j]%2==1){
result[i] = A[j];
odd_point = j+1;
break;
}
}
}else{
for(int j=even_point; j<d; j++){
if(A[j]%2==0){
result[i] = A[j];
even_point = j+1;
break;
}
}
}
}
return result;
}
}
官方题解: