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:
- If
i
is odd, thennums[i] >= nums[i - 1]
; - If
i
is even, thennums[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 };