LeetCode题解 -- 排序(324)

Wiggle Sort II

Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]…

时间复杂度:O(n*logn)
空间复杂度:O(n)

将排序后的数组分为前后两部分,每次从两部分中拿出当前最大的,按顺序放入temp数组

public void wiggleSort(int[] nums) {
        int length = nums.length;
        if(length <= 1)
            return ;
        Arrays.sort(nums);
        int mid = (length - 1 - 0) / 2 + 0;
        int left = mid;
        int right = length - 1;

        int[] temp = new int[length];
        int i = 0;
        while(left >= 0 && right > mid){
            temp[i++] = nums[left--];
            temp[i++] = nums[right--];
        }

        if(left >= 0){
            temp[i] = nums[left];
        }else if(right > mid){
            temp[i] = nums[right];
        }
        
        for(int j = 0;j < length;j++){
            nums[j] = temp[j];
        }
    }
发布了30 篇原创文章 · 获赞 0 · 访问量 860

猜你喜欢

转载自blog.csdn.net/fantow/article/details/104722747
324