按奇偶排序数组
描述
- 给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。
返回满足此条件的 任一数组 作为答案。
示例 1
输入:nums = [3,1,2,4]
输出:[2,4,3,1]
解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。
示例 2
输入:nums = [0]
输出:[0]
提示
- 1 <= nums.length <= 5000
- 0 <= nums[i] <= 5000
Typescript 版算法实现
1 ) 方案1: 两次遍历
function sortArrayByParity(nums: number[]): number[] {
const n: number = nums.length;
let index: number = 0;
const res: number[] = new Array(n).fill(0);
// 第一次遍历,将偶数放入结果数组
for (const num of nums) {
if (num % 2 === 0) {
res[index++] = num;
}
}
// 第二次遍历,将奇数放入结果数组
for (const num of nums) {
if (num % 2 === 1) {
res[index++] = num;
}
}
return res;
}
2 ) 方案2: 双指针 + 一次遍历
function sortArrayByParity(nums: number[]): number[] {
const n = nums.length;
const res = new Array(n).fill(0);
let left = 0, right = n - 1;
for (const num of nums) {
if (num % 2 === 0) {
res[left++] = num;
} else {
res[right--] = num;
}
}
return res;
};
3 ) 方案3: 原地交换
function sortArrayByParity(nums: number[]): number[] {
let left = 0, right = nums.length - 1;
while (left < right) {
while (left < right && nums[left] % 2 === 0) {
left++;
}
while (left < right && nums[right] % 2 === 1) {
right--;
}
if (left < right) {
const temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left++;
right--;
}
}
return nums;
};