[路飞]_调整数组顺序使奇数位于偶数前面

1,367 阅读1分钟

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

题目

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。

示例1

输入: nums = [1,2,3,4]
输出: [1,3,2,4] 
注: [3,1,2,4] 也是正确的答案之一。

题解

双指针

  • 定义指针left指向0位置
  • 定义指针right指向数组最后一位
  • 如果left指针为偶数,right指针为奇数,根据题目要求,交换两个整数的位置
  • 如果只有left为偶数,将right向左移动一位
  • 如果只有left为奇数,将left向右移动一位
  • 等到left >= right 停止
  • 返回结果即可

代码

var exchange = function (nums) {
  let left = 0
  let right = nums.length - 1

  while (left < right) {
    if (nums[left] % 2 === 0 && nums[right] % 2 !== 0) {
      ;[nums[left], nums[right]] = [nums[right], nums[left]]
      left++
      right--
    } else if (nums[left] % 2 === 0) {
      right--
    } else {
      left++
    }
  }
  return nums
}