Wiggle Sort II
Description
Given an unsorted array nums
, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]...
.
Example:
(1) Givennums = [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;
}
};