1、题目描述
2、解题思路
摆动排序的规律是:偶数索引的元素要小于前面和后面,奇数索引的元素要大于前面和后面。
从左往右遍历,第 0 个元素只需要和后面一个元素笔记,最终要满足 nums[0] <= nums[1],此时,第 0 个元素处理完毕;
当遍历第 1 个元素时,nums[0] <= nums[1] 已经成立,直接处理 nums[1] 和 nums[2] 即可,按照这个规律,当遍历到第 i 个位置时:
1、当 i 是偶数,由于[0, i-1]已经是摆动排序,因此 nums[i-1] >= nums[i] 已经成立,只需要判断 nums[i] 和 nums[i+1] 的关系即可;
2、当 i 是奇数,由于[0, i-1]已经是摆动排序,因此,nums[i-1] <= nums[i] 已经成立,只需要判断 nums[i] 和 nums[i+1] 的关系即可;
3、解题代码
class Solution {
public void wiggleSort(int[] nums) {
boolean less = true;
for (int i = 0; i < nums.length - 1; i++) {
if (less) { // 偶数要小于后面
if (nums[i] > nums[i + 1]) {
swap(nums, i, i + 1);
}
} else { // 奇数要大于后面
if (nums[i] < nums[i + 1]) {
swap(nums, i, i + 1);
}
}
less = !less;
}
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}