首页 > 代码库 > 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