324. Wiggle sort I && II

wiggle sort II
这一题可能有重复。
所以笨办法是先sort。
sort完之后该怎么取呢。
如果从两端取,则刚开始可以保证,到后面就无法保证一大一小了。
所以不如一个从左端,一个从中间取。
有4个,1个从0开始,一个从2开始 ,
比如有5 个,一个从0开始,一个从3开始
如果有6个,一个从0开始, 一个从3开始。
但是这样的话对于1223这样的test case来说
按这种做法就是1223。
因为中间的那个是最可能出错的,所以把中间的那个值放在最外面。
这种做法先从中间的那个值开始,再从中间的那个值结束。最中间的两个值永不相见
把最容易出错的放在两端,这样最稳妥。

    public void wiggleSort(int[] nums) {
        int[] helper = Arrays.copyOf(nums, nums.length);
        Arrays.sort(helper);
        int pt1 = (nums.length - 1) / 2 ; 
        int pt2 = nums.length - 1;
        int pt = 0;
        while (pt < nums.length) {
            nums[pt++] = helper[pt1--];
            if (pt < nums.length) {
                nums[pt++] = helper[pt2--];
            }
        }
    }

你可能感兴趣的:(324. Wiggle sort I && II)