[Leetcode] 324. Wiggle Sort II 解题报告

STM32项目分享:智能家居语音系统 (资料分享见文末)基于STM32的智能家居语音系统温湿度采集:系统通过DHT11模块采集温湿度烟雾监测:通过MQ-2模块采集环境中烟雾浓度光照强度采集:通过BH1750传感器采集环境光照强度窗帘控制:通过步进电机转动模拟窗帘控制风扇控制:通过继电器和指示灯模拟风扇驱动照明控制:通过继电器和指示灯模拟照明驱动蜂鸣器报警:环境烟雾异常情况下蜂鸣器报警OLED显示:显示温湿度、光照强度和烟雾浓度APP功能:使用机智云APP,包括功能有控制照明灯和风扇开关、显示当前温湿度信息。 阅读详情

题目:

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

Example:
(1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6]. 
(2) Given nums = [1, 3, 2, 2, 3, 1], one possible answer is [2, 3, 1, 3, 1, 2].

Note:
You may assume all input has valid answer.

Follow Up:
Can you do it in O(n) time and/or in-place with O(1) extra space?

思路:

1、排序法:这是最朴素的做法,思路也很简单:1)对数组进行排序;2)从左到右奇数索引位置放大于中位数的数;3)从右到左在偶数索引位置放小于中位数的数,剩下的位置都放中位数。这种做法的时间复杂度是O(nlogn),空间复杂度是O(n)。可以通过Leetcode的所有测试数据,但是并不符合题目对时间复杂度和空间复杂度的要求,下面我们进行优化。

2、就地置换法:在排序法中,我们是独立的插入大于或者小于中位数的数,现在我们可以同时做,也就是在遍历数组的时候,如果当前的数大于中位数就将其从左往右放在奇数位置,如果小于中位数就将其从右往左放在偶数位置。这样还需要解决的一个问题是如何可以将他们互不干扰地放在正确的位置。举个例子:1,1,2,2,2,3这6个数:

我们可以按照这样一个顺序将数组索引拉开成这样:1,3,5,0,2,4,也就是我们可以按照这样一个顺序来遍历数组,同时维护一个低位指针用来代表奇数位置已经放到哪里,和一个高位指针来表示偶数位置已经放到哪里,这样在我们遍历数组的每一个元素的时候,就可以按照这样的方式将元素分别放高位还是低位。而要将数组按照这样的索引方式遍历,我们只需要一个映射即可,即(2 * i + 1) % (len | 1) (老实说,我也没看懂这个映射到底是怎么回事。。。)。

代码:

1、排序法:

class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        if (nums.size() <= 1) {
            return;
        }
        sort(nums.begin(), nums.end());
        int len = nums.size(), k = 1, high = (len % 2) ? len - 1 : len - 2, mid = nums[len / 2];
        vector<int> ans(len, mid);
        for (int i = len - 1; i >= 0 && nums[i] > mid; --i, k += 2) {
            ans[k] = nums[i];
        }
        for (int i = 0; i < len && nums[i] < mid; ++i, high -= 2) {
            ans[high] = nums[i];
        }
        nums = ans;
    }
};

2、就地置换法:

class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        nth_element(nums.begin(), nums.begin()+nums.size()/2, nums.end());          // time complexity is O(n)
        int len = nums.size(), low = 0, high = len - 1, mid = nums[len/2], i = 0;  
        auto index = [=](int pos){ return (1 + pos * 2) % (len |1 ); };  
        while(i <= high) {  
            if(nums[index(i)] > mid) {
                swap(nums[index(i++)], nums[index(low++)]);
            }  
            else if(nums[index(i)] < mid) {
                swap(nums[index(i)],nums[index(high--)]);
            }  
            else {
                ++i;
            }  
        }  
    }
};
保姆级教程:用Python和PyTorch复现PTB-XL心电信号分类论文(附完整代码) 本文提供了一份详细的PTB-XL心电信号分类教程,涵盖从数据预处理到模型优化的完整流程。通过PyTorch实现三种深度学习架构(Conv1D、SincNet和熵特征融合网络),并针对医疗AI特有的类别不平衡问题提供解决方案。教程包含可运行的代码示例,帮助开发者快速复现论文结果并应用于实际心电信号分析场景。 阅读详情

相关推荐

[ROS] rviz 可视化工具

[ROS] rviz 可视化工具 摄像头没讲 文章目录[ROS] rviz 可视化工具1. todo2. todo*. 参考*. 问题解决*. rough 1. todo 2. todo *. 参考 *. 问题解决 *. rough roscore + rviz

weixin_37834269的博客 2049

leetcode-324-摆动排序 II-java

题目及测试 package pid324; /* 摆动排序 II 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。 示例 1: 输入: nums = [1, 5, 1, 1, 6, 4] 输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6] 示例 2: 输入: num...

今天吃了吗的博客 915

使用网分对晶体ESR/L1/C1/C0进行测量计算

Use R&amp;S Vector Network Analyzer test XTAL ESR/L1/C1/C0 測量方法:使用儀器的Port1端口,測量XTAL的S11,通過諧振的參數計算出ESR/L1/C1/C0的值。 實際晶體的等效模型:通常方便晶體分析,使用下圖(b)的等效模型,但實際測量發現晶體存在多個串聯諧振點,實際等效模型更接近(c)。 儀器測量到的S11,其中M...

qq_39138630的博客 2083

2021-8-8 324. 摆动排序 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 <=

TABE_的博客 341

基于COMSOL电弧动态仿真模型优化:高收敛性可修改吹弧方案解析

在多物理场耦合分析中,电弧动态仿真历来是数值稳定性的难点:温度从室温跃升至数万开尔文,电导率随温度呈数量级跳变,流动、传热与电磁场相互牵制,极易引发求解器不收敛或初始值不一致等问题。如何构建高收敛性的数值模型,成为开关设备灭弧性能优化的重要技术基础。通过合理的几何简化、全耦合求解器配置、辅助扫描初始化策略以及参数化建模手段,可以实现对吹弧方案的灵活调整与批量寻优,从而系统性评估气流速度、喷口形状、触头间距等关键因素对熄弧性能的影响。这类仿真方法广泛应用于断路器、接触器等高压电器产品研发,为灭弧室结构设计提供

weixin_29758911的博客 350

UE4_SpeedTree Shader源码分析

目录 1.UMaterialExpressionSpeedTree::Compile 2.Compiler->SpeedTree 3.GetSpeedTreeVertexOffset 4.Scene中的SpeedTree应用 (Scene->UpdateSpeedTreeWind) 5.GetSpeedTreeVertexOffsetInner 由于之后做风场,也需要在S...

zzgyy123的专栏 2631

【leetcode】324.摆动排序 II (四种解法,快速排序+3way-partition等,java实现)

324. 摆动排序 II 难度中等 给定一个无序的数组 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] 说明: 你可以假设所有输入都会得到有效的结果

Viper的程序员修炼手册 1071

open-mmlab / mmpose安装、使用教程

mmpose安装、使用教程mmpose安装教程1. 安装mmcv-full2. 安装MMPose2. 安装mmdet使用教程1. 预测图片2. 预测视频 mmpose mmpose是商汤旗下有又一款好用的工具箱,主要是针对姿态识别任务开发的,包括人体姿态识别和动物姿态识别。里面继承很多现成的网络可以供大家使用,并且提供了训练好的权重。用户可以更具自己的需求训练自己的数据,或者直接应用他们的结果,反正就是很全面啦!!!! github连接:https://github.com/open-mmlab/mmpos

CharmsLUO的博客 1万+

【中等】力扣算法题解析LeetCode324:摆动排序II

LeetCode 324题要求将数组重新排列为严格摆动序列(nums[0] < nums[1] > nums[2] < nums[3]...)。解决方案结合了计数排序和三向分区算法:计数找中位数:利用数值范围有限的特点,通过累加计数快速定位中位数,时间复杂度O(n)。 虚拟索引映射:通过函数 (2*i+1)%(n|1) 将连续索引映射为奇偶交错位置,确保大数在奇数位、小数在偶数位。荷兰国旗分区:在虚拟索引空间中,用双指针将元素按中位数分区,最终满足相邻元素严格大小关系。

ylumwd的博客 459

SAP_MM/CO模块-超详细的CK11N/CK40N取值逻辑梳理(十几种业务场景,1.76W字)

本文主要讲述的是三个大的知识点,超详细,涉及到知识点比较多,并且串起来讲解,这也是我在网上搜不到相关资料才自己慢慢研究测试出来的,断断续续耗费了我一周多时间,相信只要你们认真看完,肯定会有所收获; 1、CK11N/CK40N成本发布功能中,系统前台的取数逻辑,涉及到多个采购信息记录、生产版本、货源清单、配额协议等对成本价发布的影响~~!! 2、CK11N与CK40N发布的成本价不一致的问题~~!! 3、如何处理外协加工物料的外协价与BOM组件成本取值不匹配的问题~~!!

风沙的博客 4072

10、基于单倍型多样性隐马尔可夫模型的基因型错误检测

本文提出了一种基于单倍型多样性隐马尔可夫模型(HMM)的基因型错误检测方法,旨在提升三人组基因型数据中错误识别的准确性。通过利用群体水平的连锁信息,该方法克服了传统方法在小系谱数据中表现不佳的局限性。文章详细介绍了模型结构、三种替代似然函数及其计算方法,并通过模拟数据集和真实数据集验证了方法的有效性。实验结果显示,该方法在灵敏度、特异度和准确率方面均表现出色,为基因数据质量控制提供了新的解决方案。

moon9的博客 95

【LeetCode每日一题】——324.摆动排序 II

给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。 你可以假设所有输入数组都可以得到满足题目要求的结果。

IronmanJay 501

《中国电信运营商骨干网:历史、现状与未来演进》系列 第一篇:中国骨干网全景图:一级运营商与专用网络的演进

揭秘国家信息高速公路!一文读懂什么是骨干网,它如何支撑我们的数字生活,以及电信、联通、移动、广电等巨头如何构建这张“国家级动脉”。

maqh_csdn的博客 2036

[leetcode] 324. Wiggle Sort II 解题报告

题目链接:https://leetcode.com/problems/wiggle-sort-ii/ Given an unsorted array nums, reorder it such that nums[0] nums[2] . Example: (1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is

小榕流光的专栏 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【LeetCode】324.Wiggle Sort II(Medium)解题报告

【LeetCode】324.Wiggle Sort II(Medium)解题报告 题目地址:https://leetcode.com/problems/wiggle-sort-ii/description/ 题目描述:   Given an unsorted array nums, reorder it such that nums[0] &lt; nums[1] &gt; nums[...

郝春雨的博客 269

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【转载】【Leetcode】 324. Wiggle Sort II 解题报告

原文链接: https://blog.csdn.net/qq508618087/article/details/51337187思路是找到中位数,中位数左边的都小于中位数,中位数右边的都大于中位数。所以可以按照 1,3,5,7......(高位),0,2,4,6....(低位)来遍历,这里的映射很精巧。。。没想到。 即 (2*i + 1) % (len | 1)例0,1,2,3,4,5,6按照上面...

Cloud丶S的博客 322

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LeetCode 324. Wiggle Sort II

324. Wiggle Sort II Given an unsorted array nums, reorder it such that nums[0] nums[2] Example: (1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].  (2) Given nums

柳婼 の blog 825

LeetCode:324. Wiggle Sort II

LeetCode:324. Wiggle Sort II 题目描述 Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]… Example 1: Input: nums = [1, 5, 1, 1, 6, 4] Output: One possible an...

杨领well的专栏 247

324. Wiggle Sort II

324. Wiggle Sort II 1. 题目描述 题目链接 Given an unsorted array nums, reorder it such that nums[0] &amp;lt; nums[1] &amp;gt; nums[2] &amp;lt; nums[3]… Example 1: Input: nums = [1, 5, 1, 1, 6, 4] Output: One possible an...

凌凌小博客 224

LeetCode //C - 324. Wiggle Sort II

【代码】LeetCode //C - 324. Wiggle Sort II。

Made in Code 922

Leetcode 324. Wiggle Sort II(容易理解的解法)

Leetcode 324. Wiggle Sort II 题目链接: Wiggle Sort II 难度:Medium 题目大意: 对数组nums进行排序,使得nums[0] < nums[1] > nums[2] < nums[3]… 思路: 先把nums按升序排列,分成两半,将较大的数放在奇数下标的位置,较小的数放在偶数下标位置。 代码 class Solution { public void wiggleSort(int[] nums) { int len=

xue1236的博客 639

leetcode题解:324. Wiggle Sort II

https://leetcode.com/problems/wiggle-sort-ii/ 1. 解题思路 参考自https://leetcode.com/problems/wiggle-sort-ii/discuss/77682/Step-by-step-explanation-of-index-mapping-in-Java 先找出数组的中位数,然后for循环遍历数组,大于中位数的放...

scut_salmon的博客 304

leetcode 324. Wiggle Sort II

https://leetcode.com/problems/wiggle-sort-ii/ 给定一个数组,将其排序成nums[0] < nums[1] > nums[2] < nums[3] ...的次序(摆动排序) 一、问题分析 测试用例: Example 1: Input: nums = [1, 5, 1, 1, 6, 4] Output: One possi...

小景的博客 285

leetcode 324. Wiggle Sort II【如何锯齿状排序】

Wiggle Sort II Given an unsorted array nums, reorder it such that nums[0] nums[2] . Example: (1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].  (2) Given

nuanxin_520的专栏 606

【LeetCode】324. Wiggle Sort II 摆动排序 II(Medium)(JAVA)

【LeetCode】324. Wiggle Sort II 摆动排序 II(Medium)(JAVA) 题目地址: https://leetcode.com/problems/wiggle-sort-ii/ 题目描述: Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]… Example 1: Input: nums = [1, 5, 1, 1, 6, 4] Out

qq_16927853的博客 233

324. Wiggle Sort II | 324. 摆动排序 II(降序穿插)

题目 https://leetcode.com/problems/wiggle-sort-ii/submissions/ 题解 没有一次想到正确的方法,是在 WA 的测试用例的提示下,一点一点修正,才通过的。 思路 降序穿插,并且需要避免数组中间位置可能有的重复。看图: class Solution { public void wiggleSort(int[] nums) { // sort int[] sorted = new int[nums.length];

寒泉 4万+
上一篇: [Leetcode] 323. Number of Connected Components in an Undirected Graph 解题报告
下一篇: [Leetcode] 325. Maximum Size Subarray Sum Equals k 解题报告
魔豆Magicbean
博客等级 码龄19年 146粉丝 742原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值