首页 > 其他分享 >力扣-刷题-324. 摆动排序 II

力扣-刷题-324. 摆动排序 II

时间:2022-08-15 18:33:14浏览次数:92  
标签:力扣 arr 题目 nums int II 324 排序 size

题目链接

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/wiggle-sort-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目描述

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

你可以假设所有输入数组都可以得到满足题目要求的结果。

示例 1:

输入:nums = [1,5,1,1,6,4]
输出:[1,6,1,5,1,4]
解释:[1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。

示例 2:

输入:nums = [1,3,2,2,3,1]
输出:[2,3,1,3,1,2]

提示:

  • 1 <= nums.length <= 5 * 104
  • 0 <= nums[i] <= 5000
  • 题目数据保证,对于给定的输入 nums ,总能产生满足题目要求的结果

进阶:你能用 O(n) 时间复杂度和 / 或原地 O(1) 额外空间来实现吗?

题目分析

  1. 根据题目描述,按规律排序数组
  2. 对数组按非递减排序,将数组从中间位置分为两半,依次交叉排序

代码

class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        if (nums.size() == 1) {
            return;
        }
        auto arr = nums;
        std::sort(arr.begin(), arr.end(), compare);
        int mid = (nums.size() + 1) / 2;
        for (int i = 0, j = mid - 1, k = nums.size() - 1; i < nums.size(); i += 2, --j, --k) {
            nums[i] = arr[j];
            if (i + 1 < nums.size()) {
                nums[i + 1] = arr[k];
            }
        }
        return;
    }

private:
    static bool compare(const int a, const int b) {
        return a < b;
    }

};

标签:力扣,arr,题目,nums,int,II,324,排序,size
From: https://www.cnblogs.com/HanYG/p/16589266.html

相关文章

  • 力扣-88-合并两个有序数组
    本来觉得很简单,然后准备提交了发现要在数组1里面合并,没有额外空间然后就有了一个大胆的想法——我直接插进去然后sortclassSolution{public: voidmerge(vector<int>......
  • 安装IIS服务(转)
    操作场景本文档以WindowsServer2012R2操作系统和WindowsServer2008操作系统为例,介绍在Windows云服务器上进行IIS角色添加与安装。操作步骤WindowsServer......
  • 力扣练习——70 串联所有单词的子串
    1.问题描述给定一个字符串s和一些长度相同的单词words。找出s中恰好可以由words中所有单词串联形成的子串的起始位置。注意子串要与words中的单词完全匹配,中间......
  • Max Chunks To Make Sorted II
    MaxChunksToMakeSortedIIYouaregivenanintegerarray  arr.Wesplit arr intosomenumberofchunks(i.e.,partitions),andindividuallysorteachc......
  • 力扣练习——69 前K个高频单词
    1.问题描述给一非空的单词列表,返回前k个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 示例1:......
  • 力扣 101. 对称二叉树
    101.对称二叉树给你一个二叉树的根节点 root ,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输......
  • 力扣 100.相同的数
    100.相同的树给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示......
  • SP1557 GSS2 - Can you answer these queries II(离线 线段树)
    SP1557GSS2-CanyouanswerthesequeriesII\(\bigstar\texttt{Hint}\):遇到去重的问题,我们通常考虑离线询问后处理。可以枚举右端点,将询问存储在右端点,考虑用数据结......
  • MinimalAPI---部署项目到IIS
    1.安装IIS,详情见:https://product.pconline.com.cn/itbk/vedio/1903/12395139.html2.安装ASP.NETCore运行时环境和程序包下载HostingBundle文件 安装包下载地址:https......
  • 力扣233(java)-数字1的个数(困难)
    题目:给定一个整数n,计算所有小于等于n的非负整数中数字1出现的个数。 示例1:输入:n=13输出:6示例2:输入:n=0输出:0 提示:0<=n<=109来源:力扣(LeetCode)链接:h......