牛客网-剑指offer[编程题]调整数组顺序使奇数位于偶数前面 js详解

在这里插入图片描述
1.双数组解法
开辟新数组保存法:创建两个数组,一个用来存奇数,一个用来存偶数,最后合并

function reOrderArray(array)
{
    var ji = [],ou = [];
    for(let i = 0;i < array.length;i++){
        if(array[i] % 2 === 0)
            ou.push(array[i]);
        else
            ji.push(array[i]);
    }
     var newA = ji.concat(ou);
    return newA;
}

2.双指针解法
我们需要两个指针i,j
初始化i = 0,j = i + 1;
如果array[i]为奇数,i++
如果array[i]为偶数,i不动,j从i+1开始前进寻找下一个奇数
当找到下一个奇数时,可知从i到j-1都是偶数,我们需要把这些偶数整体后移一位,把array[j]的值赋值给array[i],然后i再往后寻找下一个偶数

function reOrderArray(array){
        var len = array.length;
        if(len <= 1){ // 数组空或长度为1
            return array;
        }
 
        var i = 0;
        while(i < len){
            var j = i + 1;
            if(array[i] % 2 == 0){ // a[i]为偶数,j前进,直到替换
                while(array[j] % 2 == 0){ // j为偶数,前进
                    if(j == len-1)// i为偶数,j也为偶数,一直后移到了末尾,证明后面都是偶数
                         return array;
                    j++;
                }
                // 此时j为奇数
                var count = j - i;
                var temp = array[i];
                array[i] = array[j];
                while(count > 1){
                    array[i + count] = array[i + count - 1];//数组后移
                    count --;
                }
                array[i + 1] = temp;
            }
            i++;
        }  // write code here
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值