题目描述
思路
一种比较naive的做法是先对数组进行排序
- 从左往右奇数索引位置放大于中位数的数
- 从右往左在偶数索引位置放小于中位数的数
- 剩下的位置都放中位数
- 其时间复杂度为O(nlog(n)), 空间复杂度为O(n)
代码
class Solution {
public void wiggleSort(int[] nums) {
Arrays.sort(nums);
int len = nums.length;
int mid = 0;
if(nums.length % 2 == 0){
mid = (nums[len / 2] + nums[len / 2 - 1])/2;
}else{
mid = nums[len / 2];
}
int[] temp = new int[len];
for(int i = 0; i<len;i++){
temp[i] = mid;
}
int end = len -1;
for(int i = 1; i < len;i = i + 2){
if(nums[end] > mid){
temp[i] = nums[end];
}else{
break;
}
end--;
}
int start = 0;
for(int i = (len%2==0)? len - 2 : len - 1;i >=0; i = i-2 ){
if(nums[start] < mid){
temp[i] = nums[start];
}
start++;
}
for(int i = 0;i<len;i++){
nums[i] = temp[i];
}
// nums = temp;
}
}