lintcode: Wiggle Sort Show result
2016-03-12 22:58
429 查看
Wiggle
Sort
Show result
30:00Start
Given an unsorted array
nums,
reorder it in-place such that
nums[0] <= nums[1] >= nums[2] <= nums[3]....
Have you met this question in a real interview?
Yes
Notice
Please complete the problem in-place.
Example
Tags
Related
Problems
Notes
Given
nums = [3, 5, 2, 1, 6, 4], one possible answer is
[1, 6, 2, 5, 3, 4].
class Solution { private: void swap(vector<int>& nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } public: /** * @param nums a list of integer * @return void */ void wiggleSort(vector<int>& nums) { // Write your code here if (nums.size() == 0) return; /* sort(nums.begin(), nums.end()); int len = nums.size(); int pivot = 0; int loop = 0; if (len % 2) { pivot = len/2+1; loop = len/2; } else { pivot = len/2; loop = len/2-1; } for (int i=0; i<loop; i++) { int curIdx = pivot+i; for (int j=0; j<loop-i; j++) { swap(nums, curIdx, curIdx-1); curIdx--; } } */ //主要思想是,当前小的数往前一个偶数位推;当前大的数往前一个奇数位推 for(int i = 1; i < nums.size(); i++) { // 需要交换的情况: //奇数时nums[i] < nums[i - 1]或偶数时nums[i] > nums[i - 1] if((i % 2 == 1 && nums[i] < nums[i-1]) || (i % 2 == 0 && nums[i] > nums[i-1])){ int tmp = nums[i-1]; nums[i-1] = nums[i]; nums[i] = tmp; } } } };
相关文章推荐
- 软件测试笔试和面试
- matlab调用Java函数
- 统计学习方法概论
- 70.最小生成树
- 第二周作业
- zookeeper 学习命令
- 70.最小生成树
- 70.最小生成树
- vbscript基础1
- 设计模式之观察者模式
- 解决HttpClient访问返回403 forbiddent
- HDU——1042N!(大数阶乘乘法)
- C++学习笔记之多态与虚函数,虚函数表
- chart.js绘图,如何显示图例?
- 20145330孙文馨 《Java程序设计》第二周学习总结
- 测试
- LintCode : Find Minimum in Rotated Sorted Array
- 正则表达式与grep命令
- websocket
- 诈骗电话整理