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

104 阅读1分钟

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

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

示例:

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

提示:

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

方法一:将奇偶数分别加在数组开头和末尾

var exchange = function(nums) {
    const res = [];
    for (const num of nums) {
        if (num % 2 === 0) {
            //偶数的话就push到末尾
            res.push(num);
        } else {
            //奇数的话加到开头
            res.unshift(num);
        }
    }
    return res;
};

方法二:双指针方法,两个指针对应的数字相互交换

function exchange(nums: number[]): number[] {
    let l = 0;
    let r = nums.length - 1;

    while (l < r) {
        //奇数情况
        if (nums[l] & 1) {
            l++;
            continue;
        } else if (!(nums[r] & 1)){ //偶数情况
            r--;
            continue;
        }
        [nums[l], nums[r]] = [nums[r],nums[l]];
    }
    return nums;
};