您的位置:首页 > 其它

324. Wiggle Sort II

2018-03-19 22:11 218 查看
Given an unsorted array 
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?
O(n)复杂度要求比较高,这里给出O(nlogn),程序如下所示:class Solution {
public void wiggleSort(int[] nums) {
int[] array = Arrays.copyOf(nums, nums.length);
Arrays.sort(array);
int left = 0, right = array.length - 1;
while (left < right){
int tmp = array[left];
array[left] = array[right];
array[right] = tmp;
left ++;
right --;
}
for (int i = 0; i < nums.length; ++ i){
int index = (1+2*i)%(nums.length|1);
nums[index] = array[i];
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: