原题链接在这里:https://leetcode.com/problems/wiggle-sort-ii/
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?
Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases.
Time Complexity: O(n*logn). Space: O(n).
AC Java:
1 public class Solution { 2 public void wiggleSort(int[] nums) { 3 if(nums == null || nums.length == 0){ 4 return; 5 } 6 7 Arrays.sort(nums); 8 int len = nums.length; 9 int mid = (len-1)/2 + 1; 10 int right = len; 11 int [] temp = new int[len]; 12 for(int i = 0; i<len; i++){ 13 temp[i] = i%2 == 0 ? nums[--mid] : nums[--right]; 14 } 15 for(int i = 0; i<len; i++){ 16 nums[i] = temp[i]; 17 } 18 } 19 }
时间: 2024-10-05 09:24:48