324. Wiggle Sort II
来源:互联网 发布:人工智能龙头概念股 编辑:程序博客网 时间:2024/05/18 05:08
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.
Follow Up:
Can you do it in O(n) time and/or in-place with O(1) extra space?
Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases.
一开始用了一种很naive的思路:
class Solution {public: void wiggleSort(vector<int>& nums) { int size=nums.size();//get the total number int index=size/2;//divide nums from this position vector<int> low(size,0); sort(nums.begin(),nums.end()); for(int i=0,j=0;i<size&&j<index;i+=2,j++){ low[i]=low[i+1]=nums[j];//eg. change [1,1,1] into [1,1,1,1,1,1] } if(size%2==0){//even for(int i=1,j=index;i<size&&j<size;i+=2,j++){ low[i]=nums[j]; } } else{//odd for(int i=1,j=index;i<size&&j<size-1;i+=2,j++){ low[i]=nums[j]; } low[size-1]=nums[size-1];//the last element } nums=low; }};这个测试点就不对了:[1,1,2,1,2,2,1],排序后变成[1,1,1,1,2,2,2],前一半[1,1,1]扩展成[1,1,1,1,1,1],然后插值:[1,1,1,2,1,2,2](把后一半间隔插入)
别人的解法:
class Solution {public: void wiggleSort(vector<int>& nums) { vector<int> sorted(nums); sort(sorted.begin(), sorted.end()); for (int i=nums.size()-1, j=0, k=i/2+1; i>=0; i--) nums[i] = sorted[i&1 ? k++ : j++]; }};一个trick在于通过i&1来判断位置的奇偶性。这很有意思。
另解:
void wiggleSort(vector<int>& nums) { int n = nums.size(); nth_element(nums.begin(), nums.begin() + n/2, nums.end()); int mid = nums[n/2]; auto f = [&](int i) {return (2 * i + 1) % (n | 1);}; int i = 0, j = 0, k = n - 1; while (j <= k) { if (nums[f(j)] > mid) swap(nums[f(i++)], nums[f(j++)]); else if (nums[f(j)] < mid) swap(nums[f(j)], nums[f(k--)]); else j++; } }
阅读全文
0 0
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II**
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- 324. Wiggle Sort II
- # 324. Wiggle Sort II
- 324. Wiggle Sort II
- Wannafly挑战赛1 B Xorto(前缀异或和)
- vue post 参数 springmvc不识别问题
- 7.6计算联通区域的形状描述
- 【STL】list要点及使用
- 9.13 参加邱实瑞道友的总结
- 324. Wiggle Sort II
- Android架构设计---关于MVVM模式的探讨
- 文件读写
- 别让城市智商成为卖药就医骗人,偷了未来农民养老的社保收入 偷了农民智慧,农村更需要智慧
- EditText 去除焦点 避免软键盘打开
- 基于Vue2+TypeScript的项目规划搭建
- switch
- 七大排序算法
- Markdown编辑器安装及入门