给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。
你可以假设所有输入数组都可以得到满足题目要求的结果。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/wiggle-sort-ii
思路:将数组排序后划分为两块,前一半和后一半,并且根据数组单复数分别进行讨论,将两半数据分别从大到小一边一个加入到新数组中,就可得到想要的答案。
代码如下:
class Solution {
public void wiggleSort(int[] nums) {
int[] arr=nums.clone();
Arrays.sort(arr);
int n=nums.length;
if(n%2==0){
int i=0;
int x=n/2-1,y=n-1;
while(i<n){
if(i%2==0){
nums[i]=arr[x];
i++;
x--;
}
else{
nums[i]=arr[y];
y--;
i++;
}
}
}
else{
int i=0;
int x=n/2,y=n-1;
while(i<n){
if(i%2==0){
nums[i]=arr[x];
i++;
x--;
}
else{
nums[i]=arr[y];
i++;
y--;
}
}
}
}
}