通过率 64.2%
题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
1 <= nums[i] <= 10000
思路:
双指针,一个从头开始找偶数,一个从尾开始找奇数,然后将两指针对应的值交换,直到两指针碰面
习惯性去看Krahets大神的题解,涨知识了:x&1 位运算 等价于 x%2 取余运算,即皆可用于判断数字奇偶性。
注意:位运算的优先级低,记得加括号,否则会先执行 1 === 1 和 1 === 0
1 /*JavaScript*/ 2 /** 3 * @param {number[]} nums 4 * @return {number[]} 5 */ 6 var exchange = function(nums) { 7 let i = 0, j = nums.length - 1 8 while(i < j) { 9 while(i < j && (nums[i] & 1 ) === 1) i++ 10 while(i < j && (nums[j] & 1 ) === 0) j-- 11 const temp = nums[i] 12 nums[i] = nums[j] 13 nums[j] = temp 14 } 15 return nums 16 };