按奇偶排序数组Ⅱ
描述: 给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。
你可以返回任何满足上述条件的数组作为答案。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sort-array-by-parity-ii
# 方法一:暴力破解
步骤一:现将数组分为奇偶两个数组 步骤二:循环奇数组或偶数组插入偶数组或奇数组
var sortArrayByParityII = function(A) {
let oddEven = A.reduce((res, value) => {
if(value % 2 == 0) res[0].push(value);
else res[1].push(value);
return res;
}, [[],[]]);
// console.log(oddEven);
oddEven[0].forEach((value, index) => {
oddEven[1].splice(2 * index, 0, value);
})
// console.log(oddEven[0]);
return oddEven[1];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 方法二 新空间
步骤一:创建偶数数组和奇数数组存放不满足该位置条件的偶数或奇数,开始遍历 步骤二:如果某个位置不满足奇数,如果odd没有多余的值则添加到多余偶数even中,如果odd有值则和odd中的值进行交换并删除odd相应值 步骤三:如果某个位置不满足偶数,如果even没有多余的值则添加到多余奇数odd中,如果even有值则和even中的值进行交换并删除even相应值
var sortArrayByParityII = function(A) {
let odd = [], even = [];
for(let i = 0; i < A.length; i++) {
if(i % 2 == 0 && A[i] % 2 != 0) {
if(odd.length > 0){
let a = A[odd[0]];
A[odd[0]] = A[i];
A[i] = a;
odd.shift();
}else {
even.push(i);
}
}else if(i % 2 == 1 && A[i] % 2 == 0){
if(even.length > 0){
let a = A[even[0]];
A[even[0]] = A[i];
A[i] = a;
even.shift();
}else {
odd.push(i);
}
}
}
return A;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
上次更新: 2025/09/05, 8:09:00