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;
}

annielulu
5 声望5 粉丝

引用和评论

0 条评论