/* * 324. Wiggle Sort II * 2016-7-7 by Mingyang * 我想利用I的思路,设立一个list,sort以后从头尾分别加,但是遇到1122233就不行了 * 因为这里是严格要求比周围的都大,不能等于 * 那么下面的思路非常好,就是从中间取,一中一后,依次交叉往前取 */ public void wiggleSort2(int[] nums) { Arrays.sort(nums); int[] temp = new int[nums.length]; int s = (nums.length + 1) >> 1, t = nums.length; for (int i = 0; i < nums.length; i++) { temp[i] = (i & 1) == 0 ? nums[--s] : nums[--t];
// s是最中间的那个,分别往前取 } for (int i = 0; i < nums.length; i++) nums[i] = temp[i]; }