280. Wiggle Sort

LeetCode 280. Wiggle Sort

如题所述,需要调整数组使得数组满足题述条件。直观地考虑,可以遍历一次数组,发现当前元素和下一元素不满足题述关系时,交换他们。

代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void wiggleSort(int[] nums) {
boolean lessThan = true;
for (int i = 0; i < nums.length - 1; i++) {
if (lessThan && nums[i + 1] < nums[i]) {
int temp = nums[i + 1];
nums[i + 1] = nums[i];
nums[i] = temp;
}
if (!lessThan && nums[i + 1] > nums[i]) {
int temp = nums[i + 1];
nums[i + 1] = nums[i];
nums[i] = temp;
}
lessThan = !lessThan;
}
}

我们可以进一步把代码精简如下。

1
2
3
4
5
6
7
8
9
public void wiggleSort(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
if ((i % 2 == 0) == (nums[i] > nums[i + 1])) {
int temp = nums[i];
nums[i] = nums[i + 1];
nums[i + 1] = temp;
}
}
}