Wiggle Sort
Given an unsorted array nums, reorder it in-place such that
nums[0] <= nums[1] >= nums[2] <= nums[3]....
Time Complexity
O(N)
Space Complexity
O(1)
思路
是medium的题目,其实很简单,就是找规律。
每一个数字和前一个数字进行比较,用i % 2 == 0来判断是偶数位还是奇数位,如果是偶数位,那么它要比前面一个数字大;如果是奇数位,那么它要比前面的数字小。符号要求的continue,不符合的就和前面的一个数字swap。这样子做对于3个数字,中间的数字一定会变成最大的。
代码
public void wiggleSort(int[] nums) {
// Write your code here
// if(nums == null || nums.length <= 2) return;
for(int i = 1; i < nums.length; i++){
if(i % 2 == 0){
if(nums[i] < nums[i - 1]) continue;
else swap(nums, i , i - 1);
}else{
if(nums[i] > nums[i - 1]) continue;
else swap(nums, i , i - 1);
}
}
}
private void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。