题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
解题思路
算法,数据结构
双指针
思路
用双指针指向数组的头、尾,对于左指针,找到第一个偶数;对于右指针,找到第一个奇数
交换后,在改变指针指向,继续寻找,知道二者错过或相遇
过程
我们首先声明两个指针 left, right,指向 0,nums.length - 1
通过不断改变指针,交换指针指向的元素,达到左奇右偶的序列要求
这里要注意,因为是要不断地寻找,所以我们肯定要通过一个 while 循环,那么循环♻️ 退出循环的条件是 left < right
再循环中,我们改变左右指针找到要找的元素后,做一次交换
代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var exchange = function (nums) {
if (!nums.length) return []
const res = []
let left = 0
let right = nums.length - 1
while (left < right) {
while (left < right && nums[left] % 2 !== 0) {
left++
}
while (left < right && nums[right] % 2 === 0) {
right--
}
;[nums[left], nums[right]] = [nums[right], nums[left]]
}
return nums
}