首页 > 代码库 > 280. Wiggle Sort
280. Wiggle Sort
Given an unsorted array 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]
.
思路:这题有点greedy的意思。奇数位,index偶数的时候,如果比前面的数字大,调换位置。偶数位,index奇数的时候,比之前的数字小,调换位置。
验证一下,这种调换会不会破环规律。 3 5 6 8 1.数字6奇数位调换,因为左边奇数位3是小于偶数位的5。如果调换一个比偶数位更大的数字6,那么大小关系不会破坏。右边偶数位8,原来奇数位6要小于右边偶数位8,换过来一个更小的值6,因此大小关系也不变。
2.偶数位调换。 3 10 9 8 5
同理,偶数位8要大于奇数位9.调换位置。原先奇数位10要大于9,换来一个更小的树8。大小不表。5要小于左边的偶数位,换来一个更大的9,因此大小也不变。
public class Solution { public void wiggleSort(int[] nums) { for(int i=1;i<nums.length;i++) { if(i%2==1) { if(nums[i]<nums[i-1]) { swap(nums,i); } }else { if(nums[i]>nums[i-1]) { swap(nums,i); } } } } public void swap(int[] nums,int i) { int tmp=nums[i-1]; nums[i-1]=nums[i]; nums[i]=tmp; } }
280. Wiggle Sort
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。