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

119 阅读1分钟

题目描述

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

解题思路

算法,数据结构

双指针

思路

用双指针指向数组的头、尾,对于左指针,找到第一个偶数;对于右指针,找到第一个奇数

交换后,在改变指针指向,继续寻找,知道二者错过或相遇

过程

我们首先声明两个指针 left, right,指向 0nums.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
}