Description
Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]…
Example:
(1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].
(2) Given nums = [1, 3, 2, 2, 3, 1], one possible answer is [2, 3, 1, 3, 1, 2].
Note:
You may assume all input has valid answer.
Solution:
将数组排序,可看做两个部分,最小的一半和最大的一半:
small:1 . 1 . 1
large : . 6 . 5 . 4
final : 1 6 1 5 1 4
class Solution {
public:
void wiggleSort(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<int> res;
int len = nums.size();
int k = len/2; //分成两部分
for(int i =0 ; i< len; i++){
if(i%2==0){
res.push_back(nums[i/2]); //samll
} else if(i%2==1){
res.push_back(nums[len - 1 - i/2]); //large
}
}
nums=res;
}
};