美文网首页
324、Wiggle Sort II 摆动排序

324、Wiggle Sort II 摆动排序

作者: 飞飞廉 | 来源:发表于2017-12-11 16:07 被阅读0次

Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]....

Example:
(1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].
(2) Given nums = [1, 3, 2, 2, 3, 1], one possible answer is [2, 3, 1, 3, 1, 2].

Note:
You may assume all input has valid answer.

Follow Up:
Can you do it in O(n) time and/or in-place with O(1) extra space?

Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases
思路一:
这道题给了我们一个无序数组,让我们排序成摆动数组,满足nums[0] < nums[1] > nums[2] < nums[3]...,并给了我们例子。我们可以先给数组排序,然后在做调整。调整的方法是找到数组的中间的数,相当于把有序数组从中间分成两部分,然后从前半段的末尾取一个,在从后半的末尾去一个,这样保证了第一个数小于第二个数,然后从前半段取倒数第二个,从后半段取倒数第二个,这保证了第二个数大于第三个数,且第三个数小于第四个数,以此类推直至都取完

var wiggleSort = function(nums) {
    nums.sort(function(a,b){
        return a-b;
    })
   
    var tmp=nums.concat();
    var c=Math.ceil(nums.length/2-1);
    var b=nums.length-1
    console.log(c,b)
    for(var i=0;i<tmp.length;i+=2){
        if(c==0 && nums.length%2){//奇数的情况
            nums[i]=tmp[0];
            return;
        }
        nums[i]=tmp[c--];
        nums[i+1]=tmp[b--];
    }
    
};

相关文章

网友评论

      本文标题:324、Wiggle Sort II 摆动排序

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