题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
代码片
/**
* @param {number[]} nums
* @return {number[]}
*/
// 是否是偶数
let isEven = (n) => {
// 奇数的最低位为1
return (n & 1) == 0;
};
/**
* @param {number[]} nums
* @return {number[]}
*/
var exchange = function (nums) {
if (nums == null || !nums.length) {
return nums;
}
let i = 0;
let j = nums.length - 1;
while (i < j) {
// 前面的全都是奇数,i最终指向的是从前向后看的第一个奇数
while (i < j && !isEven(nums[i])) {
i++;
}
// 后面的全都是偶数,j最终指向的是从后向前看的第一个偶数
while (i < j && isEven(nums[j])) {
j--;
}
// 交换
if (i < j) {
[nums[i], nums[j]] = [nums[j], nums[i]];
}
}
return nums;
};
// @lc code=end