这种方法对于有重复数字的数组不可行;
class Solution { public: void wiggleSort(vector<int>& nums) { //因为一定存在最优解,所以一定可行的方法就是先排序,然后将最小的数逐渐插入到最大里面; //错误,没有考虑重复答案存在情况; sort(nums.begin(),nums.end()); int i=0; int j=nums.size()-1; vector<int> res; while(i<=j){ if(i<=j) res.push_back(nums[i++]); if(i<=j) res.push_back(nums[j--]); } for(int i=0;i<nums.size();i++){ nums[i]=res[i]; } } };
对此进行改进:
class Solution { public: void wiggleSort(vector<int>& nums) { //因为一定存在最优解,所以一定可行的方法就是先排序,然后将最小的数逐渐插入到最大里面; //改进,将前后两个数组反序如1 2 3 4 5 6 分为 【3 2 1】,【6 5 4】然后按顺序插入; sort(nums.begin(),nums.end()); vector<int> res; int mid=(nums.size()+1)/2; int i=mid-1;int j=nums.size()-1; while(i>=0){ if(i>=0) res.push_back(nums[i--]); if(j>=mid) res.push_back(nums[j--]); } for(int i=0;i<nums.size();i++){ nums[i]=res[i]; } } };
class Solution {
public:
void wiggleSort(vector<
int>& nums) {
//因为一定存在最优解,所以一定可行的方法就是先排序,然后将最小的数逐渐插入到最大里面;
//改进,将前后两个数组反序如1 2 3 4 5 6 分为 【3 2 1】,【6 5 4】然后按顺序插入;
sort(nums.begin(),nums.end());
vector<
int> res;
int mid=(nums.size()+
1)/
2;
int i=mid-
1;
int j=nums.size()-
1;
while(i>=
0){
if(i>=
0) res.push_back(nums[i--]);
if(j>=mid) res.push_back(nums[j--]);
}
for(
int i=
0;i<nums.size();i++){
nums[i]=res[i];
}
}
};