[LeetCode] Wiggle Sort

Problem Description:

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


The final sorted nums needs to satisfy two conditions:

  1. If i is odd, then nums[i] >= nums[i - 1];
  2. If i is even, then nums[i] <= nums[i - 1].

The code is just to fix the orderings of nums that do not satisfy 1 and 2.

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

 

posted @ 2015-09-10 12:57  jianchao-li  阅读(2465)  评论(0编辑  收藏  举报