280. Wiggle Sort

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].

分析

因为要求奇数位的数字大于等于两边的元素,因为有等于条件存在,所以不用考虑当连续两个相同的元素连接在一起的情况,这种条件下,可以使用贪心算法,保证每个奇偶位置满足条件,即可有解

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        if(nums == NULL || nums.size() < 2) return;  
               
        for(int i = 1; i < nums.size(); ++i) {  
            if((i&1 == 1 && (nums[i] < nums[i-1])) || (i&1 == 0) && (nums[i] > nums[i-1])) {  
                swap(nums[i], nums[i - 1]);  
            }  
        }  
    }
};




posted @ 2017-02-12 17:23  copperface  阅读(140)  评论(0编辑  收藏  举报