324. Wiggle Sort II
来源:互联网 发布:体检软件哪个好 编辑:程序博客网 时间:2024/05/21 21:34
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?
Analysis:
看了discuss里的程序,即使表达同样的思想也比自己写的简练太多了。
代码中有详细注释。
Source Code(C++):
#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public: void wiggleSort(vector<int>& nums) { nth_element(nums.begin(), nums.begin()+nums.size()/2, nums.end()); int median=nums.at(nums.size()/2); //取得中位数#define A(i) nums[(1+2*i)%(nums.size()|1)] //此行的问题//偶数时对应关系:A[0]->nums[1],A[1]->nums[3],A[2]->nums[5],A[3]->nums[7],A[4]->nums[9],//A[5]->nums[0],A[6]->nums[2],A[7]->nums[4],A[8]->nums[6],A[9]->nums[8]//奇数时对应关系:A[0]->nums[1],A[1]->nums[3],A[2]->nums[5],A[3]->nums[7],//A[4]->nums[0],A[5]->nums[2],A[6]->nums[4],A[7]->nums[6],A[8]->nums[8] int head=0, tail=nums.size()-1; int k=0; while(k<=tail) { if (A(k)>median) { swap(A(head++), A(k++)); //大数放头 } else if (A(k)<median) { //小数放尾 swap(A(tail--), A(k)); } else { k++; //等于median的数放在中间以确保不会出现nums[i]!=nums[i+1]; } } }};int main() { Solution sol; vector<int> v; v.push_back(1);v.push_back(1);v.push_back(1);v.push_back(1);v.push_back(2);v.push_back(2);v.push_back(2); sol.wiggleSort(v); for (vector<int>::iterator i=v.begin(); i!=v.end(); i++) { cout << *i << ' '; } return 0;}
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
- 对IntentService的几点看法
- Servlet概述
- IntentService与Service的区别
- pku 3617 - Best Cow Line
- [RaspberryPi] 树莓派初体验 - 无线网络设置与VNC连接
- 324. Wiggle Sort II
- HTTP Client
- Permutation Sequence
- HTTP Url
- 临界资源 & 临界区
- Linux网络安全策略
- Eclipse_Debug 界面应用详解——Eclipse Debug不为人知的秘密
- C# 文件操作
- Populating Next Right Pointers in Each Node Python Java Leetcode