标签:
nums
, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]...
.Example:
(1) Given nums = [1, 5, 1, 1, 6, 4]
, one possible answer is [1, 4, 1, 5, 1, 6]
.
(2) Given nums = [1, 3, 2, 2, 3, 1]
, one possible answer is [2, 3, 1, 3, 1, 2]
.
Note:
You may assume all input has valid answer.
Follow Up:
Can you do it in O(n) time and/or in-place with O(1) extra space?
Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
public class Solution { public void wiggleSort(int[] nums) { Arrays.sort(nums); int[] copy = new int[nums.length]; for(int i = 0; i< nums.length; ++i) { copy[i] = nums[i]; } for(int i = 0; i< nums.length; ++i) { int w = i%2; if(w == 0) { nums[i] = copy[(nums.length-1)/2 - i/2]; } //Take 2, 1, 0 else//Take 5, 4, 3 { nums[i] = copy[nums.length-1 - i/2]; } } } }
Odd length: L = 7
Sorted Index: 0, 1, 2, 3, 4, 5, 6
New Index: 6, 4, 2, 0, 5, 3, 1 <- map (L-1)/2 to 0.
Even length: L = 8
Sorted Index: 0, 1, 2, 3, 4, 5, 6, 7
New Index: 6, 4, 2, 0, 7, 5, 3, 1 <- map (L-1)/2 to 0.
标签:
原文地址:http://www.cnblogs.com/neweracoding/p/5560040.html