Wiggle Sort
2016-07-20 12:26
337 查看
Given an unsorted array
For example, given
思路:这题主要在观察规律,并且证明算法的可行性。
nums[0]<=nums[1]>=nums[2]<=nums[3>=nums[4]
nums[i-2]<=nums[i-1] >= nums[i]
如果index为偶数,nums应该在左右中间。
如果index为奇数,应该比两边的大。
假设,0~i-1,已经wiggit好了,加入i,那么存在两种情况:
1. i%2==0,加进去的数,index为偶数, 则前面一个数是波峰。
if nums[i-1]>=nums[i] , nothing to do.
if nums[i-1]<=nums[i], 因为nums[i-2]<=nums[i-1], swap (nums[i-1] nums[i]), 则nums[i-2]<=nums[i]>=nums[i-1],满足条件。
2. i%2!=0, 加进去的数,index为奇数,则前面一个数是波谷。
if nums[i-1]<=nums[i], nothing to do.
if nums[i-1]>=nums[i], 因为nums[i-2]>=nums[i-1], swap (nums[i-1], nums[i]), 则 nums[i-2]>=nums[i]<=nums[i-1],满足条件。
所以,这样子swap可以保证整个array是波浪形的。
public class Solution {
public void wiggleSort(int[] nums) {
if(nums == null || nums.length <=1) return;
for(int i=1; i<nums.length; i++){
if(i%2 == 0 && nums[i-1]<=nums[i]){
swap(nums, i);
}
if(i%2!=0 && nums[i-1]>=nums[i]){
swap(nums, i);
}
}
}
public void swap(int[] nums, int index) {
int temp = nums[index];
nums[index] = nums[index-1];
nums[index-1] = temp;
}
}
nums, reorder it in-place such that
nums[0] <= nums[1] >= nums[2] <= nums[3]....
For example, given
nums = [3, 5, 2, 1, 6, 4], one possible answer is
[1, 6, 2, 5, 3, 4].
思路:这题主要在观察规律,并且证明算法的可行性。
nums[0]<=nums[1]>=nums[2]<=nums[3>=nums[4]
nums[i-2]<=nums[i-1] >= nums[i]
如果index为偶数,nums应该在左右中间。
如果index为奇数,应该比两边的大。
假设,0~i-1,已经wiggit好了,加入i,那么存在两种情况:
1. i%2==0,加进去的数,index为偶数, 则前面一个数是波峰。
if nums[i-1]>=nums[i] , nothing to do.
if nums[i-1]<=nums[i], 因为nums[i-2]<=nums[i-1], swap (nums[i-1] nums[i]), 则nums[i-2]<=nums[i]>=nums[i-1],满足条件。
2. i%2!=0, 加进去的数,index为奇数,则前面一个数是波谷。
if nums[i-1]<=nums[i], nothing to do.
if nums[i-1]>=nums[i], 因为nums[i-2]>=nums[i-1], swap (nums[i-1], nums[i]), 则 nums[i-2]>=nums[i]<=nums[i-1],满足条件。
所以,这样子swap可以保证整个array是波浪形的。
public class Solution {
public void wiggleSort(int[] nums) {
if(nums == null || nums.length <=1) return;
for(int i=1; i<nums.length; i++){
if(i%2 == 0 && nums[i-1]<=nums[i]){
swap(nums, i);
}
if(i%2!=0 && nums[i-1]>=nums[i]){
swap(nums, i);
}
}
}
public void swap(int[] nums, int index) {
int temp = nums[index];
nums[index] = nums[index-1];
nums[index-1] = temp;
}
}
相关文章推荐
- mongoVUE 连接MongoDB3.2不能正常显示collection的问题
- sublime text3 个人配置
- 05 OC之 集合 Set的使用
- PHP实现的随机IP函数【国内IP段】
- Web 通信 之 长连接、长轮询(long polling)
- Mysql的存储过程,Mybatis对存储过程的调用
- DOM(一)一些属性方法介绍以及兼容性问题
- 关于使用hibernate时的sql异常
- mmap原理及其在ART中的应用(1)
- python多线程(3)---生产者与消费者(线程通信)和Queue模块
- 简单实现一个守护进程(Daemon)
- 我所理解的Cocos2d-x 全新的Cocos2d-x3.0
- [Funkunux] Linux_2.6.22.6 内核start_kernel函数分析之parse_args
- 安卓学习笔记---好看的UI界面
- ubuntu 下安装 qq wechat VirtualBox notepadqq
- [LeetCode] 35. Search Insert Position
- HDU 5723 Abandoned country (并查集)
- Linux下Ngnix及PHP重启命令
- python基础之 sys.argv[]用法
- Build Node.Js web server in Docker containers: nodejs+pm2+mongodb+redis