标签:
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
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; } }
标签:
原文地址:http://www.cnblogs.com/Machelsky/p/5903711.html