[Cyclic Sort] 找到所有数组中消失的数字

高频刷题-循环排序(Cyclic Sort)专题 参考如下链接: https://emre.me/coding-patterns/cyclic-sort/ 以前的文章我们介绍了滑动窗口(Sliding Window), 双指针(Two Pointers), 快慢指针(Fast & Slow Pointers)等模板。今天,我们介绍一种新的解题模板,称为循环排序(Cyclic sort或Cycle sort)。这是一种非常有用的解决这种数组:包含的数字在给定数组的长度范围内,寻找缺失或重复的数字问题的方法。 下面图示下: 对于数组[2, 阅读详情

leetcode 448:Find All Numbers Disappeared in an Array,难度easy

0. 题干

给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。

找到所有在 [1, n] 范围之间没有出现在数组中的数字。

您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。

示例:

输入:
[4,3,2,7,8,2,3,1]

输出:
[5,6]

1. 代码

将数组元素对应为索引的位置加n
遍历加n后的数组,若数组元素值小于等于n,则说明数组下标值不存在,即消失的数字。

补充说明 C++中的push_back函数:
可以把vector简单理解为动态一维数组,push_back作用是在这个一维数组尾部插入一个元素 其值为
push_back的参数值假设当前vector元素序列为 1 5 7 大小为3,那么 push_back(4)后 元素序列为1 5 7 4大小为4

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        vector<int> res;
        if(nums.empty()) return nums;
        for(int i=0;i<nums.size();i++)
        {
            int index=(nums[i]-1)%nums.size();
// 减1一方面能够,符合数组下标从0开始
// 而且能确保,享受后面+nums.size()和不加之前有明确的区分
            nums[index]+=nums.size();
        }
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]<=nums.size())
//享受不了之前+nums.size()的下标,还是原数组的值,其必然<=nums.size()
// 根据之前下标的处理,不存在的值输出i+1即可
//注意这个边界条件等于号是一定需要的,因为未处理的可能恰好等于nums.size()
                res.push_back(i+1);
        }
        return res;
    }
};

在这里插入图片描述

【信息科学与工程学】计算机科学与自动化——第八十一篇 Java分布式软件高并发/高可用算法01 4. 消息队列(如Kafka的Topic分区,本质是范围)。3. 若是ACCEPT事件,bossGroup线程接受连接,创建SocketChannel,并将其注册到workerGroup的一个EventLoop的Selector上,关注READ事件。1. 分布式缓存分片(如Redis Cluster)。4. 分布式文件存储(如Ceph CRUSH)。6. 调用栈的模拟(如协程)。3. 服务网格(如Istio)的基础。2. 本地缓存与集中式缓存(如Redis)的一致性维护。3. 静态数据(如配置)缓存。 阅读详情

相关推荐

IBM System x3650 M5 IMM配置

1、IMM基本介绍 IMM,全称是Intel Mobile Module是IBM服务器上的集成管理模块,该模块是独立于服务器系统,可以通过一个单独的IP地址,使用Web和虚拟端口方式直接启动、停止和管理远程服务器,即使主板、处理器或者内存故障导致主机无法启动,也依然可以远程管理服务器,可以远程直接操作启动画面和服务器工作界面。 2、IP地址配置 2.1 通过Web方式修改IP地址 IBM服...

血饮渊虹的博客 4万+

53.【二分查找】II. 0~n-1中缺失的数字

题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 示例 1: 输入: [0,1,3] 输出: 2 示例 2: 输入: [0,1,2,3,4,5,6,7,9] 输出: 8 分析 已知0~n-1已排序数组,所以键值相同。 取中间位置数字比较是否与数字位置值相同 相同向中间数字后方查找 不通向中间数字前方查找 代码实现 public int missingNumber(int[] nums

积累 沉淀 博学 广思 567

AIAgent知识表示与推理:基于本体论与规则引擎的实现

AIAgent知识表示与推理:基于本体论与规则引擎的实现 1. 背景介绍 人工智能(AI)系统的核心是知识表示和推理,这是实现智能行为的基础。在过去的几十年里,人工智能领域一直致力于研究如何有效地表示和推理知识,以支持智能系统的决策和行为。其中,基于本体论的知识表示和

AI天才研究院 1493

Java算法之循环排序(Cyclic Sort)

循环排序(Cyclic Sort)是一种最小化移动次数的原地排序算法,它利用了数组元素的初始顺序。如果一个元素不在它最终应该在的位置,循环排序会找到这个元素应该在的位置,并将该位置的元素交换过来,直到这个循环结束。这个过程会将整个循环中的所有元素放到正确的位置上。

weixin_38959316的博客 637

STMCubeMX使用TB6612驱动编码轮并进行测速

TB6612电机驱动模块通过IN1和IN2引脚控制电机的旋转方向,并通过PWM信号的占空比调节电机速度。代码示例展示了如何使用GPIO控制电机的正反转,以及如何动态调整PWM占空比实现速度控制。系统设计中,TB6612与编码减速电机连接,STM32CubeMX用于初始化GPIO和PWM输出。编码器接口配置使用TIM3进行测速,TIM4定时器用于速度计算。Keil软件中编写的代码包括编码轮计数值获取、速度计算、电机正反转控制以及小车运动控制等功能。通过OLED显示速度,并实现电机的调试与测试。

wwivn的博客 2260

ROS基础(一)——命令行代码(以小乌龟程序为例)

ROS学习(一)——命令行代码(以小乌龟程序为例)1 基础命令行语句1.1 roscore1.2 rqt_graph(显示系统计算图)1.3 rosnode(显示所有节点相关信息)1.4 rostopic(和话题相关)2 服务类型指令rosservice同时存在两只海龟3 指令记录 1 基础命令行语句 从大二四旋翼无人机编队后就没再接触过ROS了,最近由于科研任务需要重新捡起来,打算系统学一下!学习过程参考古月居老师的视频,有兴趣的同学可以去[BliBli]学习。 学习平台:Ubuntu 18.04 硬件

北理自动化小白 6266

(C++) Leetcode算法 -448、找到所有数组中消失的数字

找到所有数组中消失的数字(简单)

weixin_46436048的博客 328

RDP Wrapper失效了?别慌!教你如何手动为Windows 10/11最新版本添加rdpwrap.ini配置

本文详细介绍了当RDP Wrapper在Windows 10/11最新版本中失效时,如何手动添加rdpwrap.ini配置以恢复多用户远程桌面功能。通过获取最新配置文件、安全替换配置的完整流程以及高级手动配置技巧,帮助用户解决[Not support]问题,确保远程工作流程不受系统更新影响。

weixin_30765577的博客 624

448. 找到所有数组中消失的数字(C++)

思路2: 我们可以初始化一个长度为输入的数组result其初始值全为0,遍历给定数组,将给定数组中的值都加上一个固定的长度 再写入result中正确的对应位置。如 [4,3,2,7,8,2,3,1],第一个数为4,我们获取的下标索引因该是 index=nums[0]-1;思路1:通过两个循环,外层是我们要查看在不在数组的数字,内层是给定的输入数组,对每一个要查看的数组定义一个标识位,然后遍历内层,如果找到了就设置标志位为真,同时将标志位加入到循环的条件判断中减少循环次数。中的数字,并以数组的形式返回结果。

qq_54065331的博客 453

ifix5.8连接ab plc的点-通过rslinx

以ifix连接ab plc的点为例 1.先在rslinx上把plc的点导出为opc server 2.使用opc power tool 作为opc client 去连接 3.保存到项目的PDB文件夹下面,并且以节点名命名。 也可以不以节点名命名,系统自动会生成一个以节点名命名的这种文件,就显得很乱。 同时,项目的PDB目录下面必须还得拷过来一个de...

中国智造2025 4114

SPV1050低功耗微功率太阳能充电管理模块原理图设计,已量产

在物联网应用快速普及的今天,户外低功耗传感器(如土壤温湿度、环境光照、无线节点等)的供电始终是行业痛点 —— 传统锂电池不仅需要定期更换,维护成本高,还难以满足 “终身免维护” 的场景需求。为此,我们设计了一款专为 1V~3V 低电压小型太阳能板优化的微功率太阳能电源管理模块,结合 USB 备用充电路径,实现了低功耗传感器的长期自主供电。

不脱发的程序猿 444

循环排序(Cyclic Sort)

Pattern: Cyclic Sort,循环排序 介绍部分来自:https://www.zhihu.com/question/36738189/answer/908664455 作者:穷码农 这种模式讲述的是一直很好玩的方法:可以用来处理数组中的数值限定在一定的区间的问题。这种模式一个个遍历数组中的元素,如果当前这个数它不在其应该在的位置的话,咱们就把它和它应该在的那个位置上的数交换一下。你可以尝试将该数放到其正确的位置上,但这复杂度就会是O(n^2)。这样的话,可能就不是最优解了。因此循环排序的优势就

weixin_43989102的博客 2620

Claude Code 100个真实案例 - 用AI批量清洗Excel脏数据(10万行3分钟搞定)

本案例展示如何使用 Claude Code 搭建一个强大的 Excel 数据清洗工具。支持自动检测和处理空值、重复行、格式错误、异常值等常见脏数据问题,批量处理10万行数据只需3分钟。

yueyeguzhuo的专栏 38

5. Pattern: Cyclic Sort,循环排序

这种模式讲述的是一直很好玩的方法:可以用来处理数组中的数值限定在一定的区间的问题。这种模式一个个遍历数组中的元素,如果当前这个数它不在其应该在的位置的话,咱们就把它和它应该在的那个位置上的数交换一下。你可以尝试将该数放到其正确的位置上,但这复杂度就会是O(n^2)。这样的话,可能就不是最优解了。因此循环排序的优势就体现出来了。 y 该图的含义是第一步将下标为0的2拿出来,扫描数组发现有1个数字比它小,于是应该把他放在下标为1的地方,所以与元素6交换位置 第二步将下标为1的2拿出来,发现在正确位置 第

一剑曾当百万师 342

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode448. 找到所有数组中消失的数字c++实现

leetcode448. 找到所有数组中消失的数字c++实现 题目描述 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2...

qq_35091252的博客 763

怀旧版电脑GBC模拟器

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

leetcode环形排序(cyclic sort)问题汇总

循环排序问题,一般是为了简化数组排序复杂度的一类问题。通过这种方式可以将数组排序的复杂度从o(n2)o(n^2)o(n2)降低到o(n)o(n)o(n),甚至于o(1)o(1)o(1) 另外,在排序的题目中要善于运用字典和集合去重计数的性质,降低算法的复杂度。有时候还会涉及到一些位运算。 268.缺失的数字 这道题很简单,利用一个enumerate即可 class Solution(object)...

书生的日常 1777

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

448. 找到所有数组中消失的数字 Leetcode c++ 实现

给定一个范围在1 ≤ a[i] ≤ n (n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 解决方案: c...

hopegrace的博客 313

Python堆的基本用法

官方链接:https://docs.python.org/3/library/heapq.html 堆,其实是二叉树的一种。Python中的堆其实是小根堆,即每一个父节点都小于等于它的子节点。 堆这种结构在leetcode刷题过程中经常遇到。 对于一个堆heap来说,它最小的元素总是它的根节点,即heap[0]。 对于一个堆来说,它的导入比较简单 import heapq heap = [] heappush 通过heappush方法可以将数字加入堆中 heapq.heappush(heap,1) .

书生的日常 3917

448. 找到所有数组中消失的数字

Q: 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] A: 虽然是简单题,但...

Fudanqqqqq的博客 237

448. 找到所有数组中消失的数字——c++

给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] class...

qq_42376136的博客 549

Leetcode 448. 找到所有数组中消失的数字 C++

Leetcode 448. 找到所有数组中消失的数字 题目 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 题解 因为数组中的数为[1,n],因此我们不妨找到i的时候,将nums[i]

weixin_43750513的博客 321

【LeetCode 简单题】102-找到所有数组中消失的数字

声明: 今天是第102道题。给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除 (手动比心ღ( ´・ᴗ・` )) ...

weixin_41011942的博客 512

448. 找到所有数组中消失的数字/C++

class Solution { public: vector<int> findDisappearedNumbers(vector<int>& nums) { if(nums.empty()) return nums; int size = nums.size(); for(int i=0;i<siz...

Zolewit的博客 433

找到所有数组中消失的数字

题目 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 思路 遍历该数组,如...

wyy的博客 308

LeetCode448. 找到所有数组中消失的数字

给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 思路:为1~n的元素构建哈希表;元...

1号帅比的博客 822
上一篇: [Cyclic Sort] 缺失数字
下一篇: [从零开始] 使用FFmpeg对ogg音频文件进行处理
1byte ≠ 8bit
博客等级 码龄8年 7242粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值