题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
解题思路
算法
双指针,左指针 l 指向第一个需要交换的左边元素, r 指向第一个需要交换的右边元素
过程
我们用的是双指针,他们的作用是不断地查找需要交换的元素,那么什么是需要交换的元素?
因为我们要左奇右偶,因此需要把奇数交换到左边,所以 l 要指向的,实际上就是偶数的索引,我们把它给交换到右边去,r 则是相反~
我们通过 while 循环不断查找,知道二者相遇
代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var exchange = function(nums) {
let l = 0, r = nums.length - 1
while (l < r) {
while (l < r && nums[l] % 2 !== 0) l++
while (l < r && nums[r] % 2 === 0) r--
;[nums[l], nums[r]] = [nums[r], nums[l]]
}
return nums
};