leetcode 算法题922 (简单241) 按奇偶排序数组 II
- 题目介绍
给定一个非负整数数组 A,
A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,
以便当 A[i] 为奇数时,i 也是奇数;
当 A[i] 为偶数时, i 也是偶数。
你可以返回任何满足上述条件的数组作为答案。
- 示例
输入:[4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
- 提示
- 2 <= A.length <= 20000
- A.length % 2 == 0
- 0 <= A[i] <= 1000
- 解法一
/**
* @param {number[]} A
* @return {number[]}
*/
var sortArrayByParityII = function(A) {
let curr = q = 0, p = 1;
while(curr < A.length) {
while((curr + A[curr]) % 2) {
if(curr % 2) {
changeArray(A, curr, q);
q += 2;
} else {
changeArray(A, curr, p);
p += 2;
}
}
curr++;
}
return A;
};
const changeArray = (array, i, j) => {
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
}
执行用时 : 124 ms, 在所有 JavaScript 提交中击败了92.24%的用户
内存消耗 : 38.4 MB, 在所有 JavaScript 提交中击败了86.83%的用户
- 解法二
/**
* @param {number[]} A
* @return {number[]}
*/
var sortArrayByParityII = function(A) {
let q = [], p = [], i = 0;
while(i < A.length) {
if(A[i] % 2) {
q.push(A[i++]);
} else {
p.push(A[i++]);
}
}
i = 0;
while(i < A.length) {
if(i % 2) {
A[i++] = q.shift();
} else {
A[i++] = p.shift();
}
}
return A;
};
执行用时 : 128 ms, 在所有 JavaScript 提交中击败了88.58%的用户
内存消耗 : 39.7 MB, 在所有 JavaScript 提交中击败了63.42%的用户