【路飞】算法与数据结构-剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

113 阅读1分钟

不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。

LeetCode:原题地址

题目要求

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

示例 1:

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

提示:

  1. 0 <= nums.length <= 50000
  2. 0 <= nums[i] <= 10000

思路

  • 定义 left,right 双指针
  • left 指针从左向右遍历,用于发现左侧偶数
  • right 指针从右向左遍历,用于发现右侧奇数
  • 交换左右指针数字,再重复此步骤
/**
 * @param {number[]} nums
 * @return {number[]}
 */
var exchange = function(nums) {
    let left = 0, right = nums.length-1;
    while(left < right) {
        while(left< right && nums[left] % 2 == 1)  left++;
        while(left < right && nums[right] % 2 == 0)  right--;
        swap(nums, left, right);
    }
    return nums;
};

function swap(nums, i, j) {
    let temp = nums[i]
    nums[i] = nums[j] 
    nums[j] = temp
}