zoukankan      html  css  js  c++  java
  • leetcode 324. 摆动排序 II java

    题目:

    给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。

    示例 1:

    输入: nums = [1, 5, 1, 1, 6, 4]
    输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]
    示例 2:

    输入: nums = [1, 3, 2, 2, 3, 1]
    输出: 一个可能的答案是 [2, 3, 1, 3, 1, 2]
    说明:
    你可以假设所有输入都会得到有效的结果。

    解题:

    class Solution {
    
        /**
         * 先排序再穿插
         * O(nlogn)+O(n)=O(nlogn)
         *
         * @param nums
         */
        public void wiggleSort(int[] nums) {
            //排序
            Arrays.sort(nums);
            int len = nums.length, i = 0;
            int[] smaller = new int[len % 2 == 0 ? len / 2 : (len / 2 + 1)], bigger = new int[len / 2];
            //复制,将smaller与bigger数组进行赋值
            System.arraycopy(nums, 0, smaller, 0, smaller.length);
            System.arraycopy(nums, smaller.length, bigger, 0, len / 2);
            //穿插
            for (; i < len / 2; i++) {
                nums[2 * i] = smaller[smaller.length - 1 - i];
                nums[2 * i + 1] = bigger[len / 2 - 1 - i];
            }
            if (len % 2 != 0) nums[2 * i] = smaller[smaller.length - 1 - i];
        }
    }
  • 相关阅读:
    计算最大公因数
    最大子序列和问题
    C++三大函数:析构函数、复制构造函数和operator=
    C++函数返回值传递
    C++动态内存分配
    Halcon Assistants
    网格细分算法
    HDevelop Guide
    MeshLab
    point cloud registration
  • 原文地址:https://www.cnblogs.com/yanhowever/p/11794480.html
Copyright © 2011-2022 走看看