摆动排序 II

Posted 雪浪snowWave

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了摆动排序 II相关的知识,希望对你有一定的参考价值。

题目;给一个数组,让后把它摆动排序。比如给[[1, 5, 1, 1, 6, 4],排序之后是[1, 4, 1, 5, 1, 6];   给[1, 3, 2, 2, 3, 1],排序之后是[2, 3, 1, 3, 1, 2]

思路:题目实际要求O(n),但是没想到,简单的做法,先排序,然后从中间分成大小两部分,小的部分从中间到左边取,大的部分从右边往中间取。但是要先复制一份数组对它排序,然后用排好序的对原数组赋值。。

 

public class Solution {
    public void wiggleSort(int[] nums) {
        int n = nums.length;
        if(n == 0) return ;
        int[] a = Arrays.copyOfRange(nums,0,n); 
        Arrays.sort(a);
        int k = 0 , p = (n-1)/2, q = n-1;
        boolean sign = true;
     //sign控制交替赋值
while(k < n){ if(sign) nums[k++]=a[p--]; else nums[k++]=a[q--]; sign = !sign; } } }

 

以上是关于摆动排序 II的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode 324] 摆动排序 II 思维+排序

[leetcode 324] 摆动排序 II 思维+排序

324. 摆动排序 II(三路划分算法)

[Leetcode] 第324题 摆动排序II

LeetCode 324 摆动排序 II[排序 双指针] HERODING的LeetCode之路

2021-11-05:摆动排序 II。给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。你可以假设所有输入数组都可以