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

Posted on 2022-03-15 13:42  AcTourist  阅读(26)  评论(0)    收藏  举报

一、题目

 

二、分析

  1.判断奇偶性:nums[i] %2 == 0 ;除于等于零 为偶 反之为奇数

  2.第一种方法:创建两个新数组分别为:奇数 和 偶数 存放的数组,然后利用条件进行判断,将每个nums[i] 放到相应数组里,再里用到 cancat() (方法用于连接两个或多个数组)
  JavaScript Array concat() 方法 (w3school.com.cn) 时间复杂度:O(n)
  3.第二种方法:双指针,一头指向数组头部,一头指向数组尾部,头指针向右进行直到找到偶数,尾指针向左进行直到找到奇数,然后位置互换,执行上一步;时间复杂度 O(n)
三、代码
/**
 * @param {number[]} nums
 * @return {number[]}
 */
var exchange = function(nums) {
    let a = new Array();
    let b = new Array();
    let n = nums.length;
    for( let i = 0 ; i <= n-1 ; i++){
        if( nums[i] %2 == 0 ){
            b.push(nums[i]);
        }else{
            a.push(nums[i]);
        }
    }

    return a.concat(b);
};
/**
 * @param {number[]} nums
 * @return {number[]}
 */
var exchange = function(nums) {
    let n = nums.length;
    let i = 0, j = n -1;
    if( !n){
        return [];
    }
    
    while( i < j){
        while( i < n && nums[i]%2 ) i++;
        while( j >=0 && nums[j]%2 == 0) j--;

        if( i<j ){
            [nums[i],nums[j]] = [nums[j],nums[i]];
            i++;
            j--;
        }
    }

    return nums;
};