其他分享
首页 > 其他分享> > leetcode 324. 摆动排序 II

leetcode 324. 摆动排序 II

作者:互联网

题目描述:

给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。

你可以假设所有输入数组都可以得到满足题目要求的结果。

链接:https://leetcode-cn.com/problems/wiggle-sort-ii

解题思路:

我一开始想的是先对数组排序,然后按下标分为大 小两部分,然后从这两个数组左边开始,小的压进结果数组一个,再压入一个大的,可是这种情况不能避免中间重复元素,比如[4,5,5,6],按这种思路得到的是[4,5,5,6],显然这不符合题意,那问题出在哪呢?就出在第二个5被放进了4和第一个5之间,要是这里放6就好了,如果从小数组的左边和大数组的右边开始,那么结果是[4,6,5,5],也不对,这样两遍最后都会走到原数组的中间部分,重复元素势必会相遇。
必须一开始就把他们分开,那就干脆都从右边开始,这样中间部分会被放在小数组的前面,大数组的后面。

c++代码:

class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        /*if(nums.size()==1) return;
        if(nums.size()==2){
            sort(nums.begin(),nums.end());
            return;
        }*/
        vector<int> numsmin;
        sort(nums.begin(),nums.end());
        if(nums.size()%2==0){
            for(int i=nums.size()/2-1;i>=0;i--){
                numsmin.push_back(nums[i]);
                numsmin.push_back(nums[i+nums.size()/2]);
        }
        nums=numsmin;
        return;
        }
        for(int i=nums.size()/2;i>=1;i--){
                numsmin.push_back(nums[i]);
                numsmin.push_back(nums[i+nums.size()/2]);
        }
        if(nums.size()%2!=0) numsmin.push_back(nums[0]);
        nums=numsmin;
        return;
    }
};

标签:数组,numsmin,nums,back,II,324,push,leetcode,size
来源: https://blog.csdn.net/Lookatm1/article/details/116032104