美文网首页
每日一题[17]-奇偶数排列

每日一题[17]-奇偶数排列

作者: MAXPUP | 来源:发表于2017-03-15 10:57 被阅读0次

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
    解:
    第一种思路很简短,遍历一遍,奇数放一个array,偶数放一个array。

    function reOrderArray(array)
    {
        if(array.length<2)return array;
        var leftA=[], rightA=[];
        for(var i in array){
          if((array[i]%2)==1){
            leftA.push(array[i]);
          }else {
            rightA.push(array[i]);
          }
        }
        return leftA.concat(rightA);
    }
    

    这种算法时间复杂度为o(n),但是牺牲了内存。
    第二种使用了冒泡排序的思想,如果偶数后面是奇数就交换。

    function reOrderArray(array)
    {
        if(array.length<2)return array;
        for(var i=0;i<array.length;i++){
          for(var j=array.length-1;j>i;j--){
            if((array[j]%2==1) && (array[j-1]%2===0)){
              var temp = array[j];
              array[j] = array[j-1];
              array[j-1]= temp;
            }
          }
        }
        return array;
    }
    

    这种算法时间复杂度较大,O(n2),但是不占用过多的内存。
    最后,两种算法在牛客网跑都是30ms,ㄟ( ▔, ▔ )ㄏ

    相关文章

      网友评论

          本文标题:每日一题[17]-奇偶数排列

          本文链接:https://www.haomeiwen.com/subject/ugclnttx.html