280. Wiggle Sort

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

For example, given nums = [3, 5, 2, 1, 6, 4], one possible answer is [1, 6, 2, 5, 3, 4].

一刷
题解:一个特别简单的思路,如果index为奇数,且小于左边,交换;
如果如果index为偶数,且大于左边,交换。

public class Solution {
    public void wiggleSort(int[] nums) {
        if(nums.length<=1) return;
        for(int i=1; i<nums.length; i++){
            if(i%2 == 1 && nums[i] < nums[i-1]) swap(nums, i, i-1);
            else if(i%2 == 0 && nums[i]>nums[i-1]) 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;
    }
}

二刷
用bit operation来提速

public class Solution {
    public void wiggleSort(int[] nums) {
        for (int i = 1; i < nums.length; i++)
            if (((i & 1) == 0) == (nums[i - 1] < nums[i])) xwap(nums, i);
    }

    private void xwap(int[] a, int i) {
        int t = a[i]; a[i] = a[i - 1]; a[i - 1] = t;
    }
}

三刷
同上


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容