Given an unsorted array nums
, reorder it in-place such that nums[0] <= nums[1] >= nums[2] <= nums[3]...
.
For example, given nums = [3, 5, 2, 1, 6, 4]
, one possible answer is [1, 6, 2, 5, 3, 4]
.
又是一道让我觉得,还有这种操作??????的题目。
先排序,再把除去头尾的部分两两swap。。。
public class Solution {
public void wiggleSort(int[] nums) {
Arrays.sort(nums);
for(int i = 1; i< nums.length - 1; i+=2){
int tmp = nums[i];
nums[i] = nums[i + 1];
nums[i + 1] = tmp;
}
}
}
当然也可以不排序, 遍历的时候根据wiggle的要求,交换。
public class Solution {
public void wiggleSort(int[] nums) {
for(int i = 0; i< nums.length - 1; i++){
if(((i % 2== 0) && (nums[i] > nums[i + 1])) || ((i % 2 != 0) && (nums[i] < nums[i + 1]))){
int tmp = nums[i];
nums[i] = nums[i+1];
nums[i+1] = tmp;
}
}
}
}