0%

Wiggle Sort

Question

Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] <= nums[3]….

Example:

Input: nums = [3,5,2,1,6,4]
Output: One possible answer is [3,5,1,6,2,4]

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
@param: int[] nums
@return:
Algorithm: 记录一个sign,表示先小于后大于,然后判断swap
*/
public void wiggleSort(int[] nums) {
if (nums.length <= 1) {
return;
}

boolean sign = true;
for (int i = 0; i < nums.length-1; i++) {
if (sign) {
if (nums[i] > nums[i+1]) {
swap(nums, i, i+1);
}
}else {
if (nums[i] < nums[i+1]) {
swap(nums, i, i+1);
}
}
sign = !sign;
}
}

public void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}