# 调整数组顺序使奇数位于偶数前面

# 一、题目

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

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

提示: 0 <= nums.length <= 50000 1 <= nums[i] <= 10000

# 二、解题思路

1、额外的数组,时间复杂度 O(n),空间复杂度 O(n)

2、双指针,时间复杂度 O(n),空间复杂度 O(1)

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var exchange = function(nums) {
    // 数组size小于2时,直接返回空数组
    if (nums.length < 2) return nums;

    let left = 0; // 左指针
    let right = nums.length - 1; // 右指针

    while(left < right) {
        while(nums[left] % 2 !== 0 && left < right) {
            left++;
        }

        while(nums[right] % 2 === 0 && left < right) {
            right--;
        }
        
        // left对应的是偶数,right对应的是奇数,交换一下
        // let temp = nums[left];
        // nums[left] = nums[right];
        // nums[right] = temp;

        [nums[left], nums[right]] = [nums[right], nums[left]];
    }

    return nums;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
上次更新: 1/5/2022, 9:25:14 AM