Wiggle Sort I && II

题目大意:

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

For example, given nums = [3, 5, 2, 1, 6, 4], one possible answer is [1, 6, 2, 5, 3, 4].

分析:

就是要求将一个数组排列成一个摇摆排序,其实通过简单的交换就可以实现(注意这里题目条件当中nums[0] <= nums[1],如果没有这个条件,是没有办法通过交换实现的)

具体思路看代码好了,如下:

class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        int n = nums.size();

        for(int i=1; i<n; ++i)
        {
            if((i % 2== 1 && nums[i] < nums[i-1])
                    || (i % 2 == 0 && nums[i] > nums[i-1]))
            {
                swap(nums[i], nums[i-1]);
            }
        }
    }
private:
    void swap(int &a, int &b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
};

上述代码时间复杂度为O(n),空间复杂度为O(1)

II是对I的延伸,题目链接:https://leetcode.com/problems/wiggle-sort-ii/

解题思路:(暂时还没有想到好的解决方法)

原文地址:https://www.cnblogs.com/shirley-ict/p/5601915.html