Leetcode442. 数组中重复的数据

【leetcode】剑指offer03 ---数组中重复的数字(C++) 数组中重复的数字3种解法数组中重复的数字 数组中重复的数字 题目链接:https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/ 题解一:排序+遍历数组 代码如下: class Solution { public: int findRepeatNumber(vector<int>& nums) { sort(nums.begin(),nums.end()); f 阅读详情

Every day a Leetcode

题目来源:442. 数组中重复的数据

解法1:将元素交换到对应的位置

由于给定的 n 个数都在 [1,n] 的范围内,如果有数字出现了两次,就意味着 [1,n] 中有数字没有出现过。

因此,我们可以尝试将每一个数放在对应的位置。由于数组的下标范围是 [0,n−1],我们需要将数 i 放在数组中下标为 i−1 的位置:

如果 i 恰好出现了一次,那么将 iii 放在数组中下标为 i−1 的位置即可;
如果 i 出现了两次,那么我们希望其中的一个 iii 放在数组下标中为 i−1 的位置,另一个 i 放置在任意「不冲突」的位置 j。也就是说,数 j+1 没有在数组中出现过。
这样一来,如果我们按照上述的规则放置每一个数,那么我们只需要对数组进行一次遍历。当遍历到位置 i 时,如果 nums[i]−1≠i,说明 nums[i] 出现了两次(另一次出现在位置 num[i]−1),我们就可以将 num[i] 放入答案。

放置的方法也很直观:我们对数组进行一次遍历。当遍历到位置 iii 时,我们知道 nums[i] 应该被放在位置 nums[i]−1。因此我们交换 num[i] 和 nums[nums[i]−1] 即可,直到待交换的两个元素相等为止。

代码:

/*
 * @lc app=leetcode.cn id=442 lang=cpp
 *
 * [442] 数组中重复的数据
 */

// @lc code=start
class Solution
{
public:
    vector<int> findDuplicates(vector<int> &nums)
    {
        int n = nums.size();
        for (int i = 0; i < n; i++)
            while (nums[i] != nums[nums[i] - 1])
                swap(nums[i], nums[nums[i] - 1]);
        vector<int> ans;
        for (int i = 0; i < n; i++)
            if (nums[i] - 1 != i)
                ans.push_back(nums[i]);
        return ans;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。

解法2:使用正负号作为标记

我们也可以给 nums[i] 加上「负号」表示数 i+1 已经出现过一次。具体地,我们首先对数组进行一次遍历。当遍历到位置 iii 时,我们考虑 nums[nums[i]−1] 的正负性:

如果 nums[nums[i]−1] 是正数,说明 nums[i] 还没有出现过,我们将 nums[nums[i]−1] 加上负号;

如果 nums[nums[i]−1] 是负数,说明 nums[i] 已经出现过一次,我们将 nums[i] 放入答案。

由于 nums[i] 本身可能已经为负数,因此在将 nums[i] 作为下标或者放入答案时,需要取绝对值。

代码:

class Solution
{
public:
    vector<int> findDuplicates(vector<int> &nums)
    {
        int n = nums.size();
        vector<int> ans;
        for (int i = 0; i < n; i++)
        {
            int x = abs(nums[i]);
            if (nums[x - 1] > 0)
                nums[x - 1] = -nums[x - 1]; // 取反,做标记
            else
                ans.push_back(x);
        }
        return ans;
    }
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。

M2DGR数据集在主流SLAM框架中的实战配置指南:从ORB-SLAM到FAST-LIO的完整流程 本文提供了M2DGR多传感器数据集在主流SLAM框架中的实战配置指南。详细介绍了从ORB-SLAM、VINS-Mono等视觉/视觉惯性框架,到A-LOAM、FAST-LIO等激光/激光惯性框架的完整配置流程、参数调整要点及常见问题解决方案。通过实际测试对比,分析了各算法在M2DGR数据集上的表现,为机器人定位与建图研究提供了宝贵的实战经验。 阅读详情

相关推荐

LeGO-LOAM相对LOAM的改进---地面分离的方法-算法原理+代码讲解

实际上此种地⾯分离算法有⼀些简单,我们可以结合激光雷达安装⾼度等其他先验信息进⾏优化,避免将桌子这些当作地面点。LeGO-LOAM中前端改进中很重要的⼀点就是充分利⽤了地⾯点,那⾸先⾃然是提取对地⾯点的提取。理想情况下, 应该接近0,考虑到⼀⽅⾯激光雷达安装也⽆法做到绝对⽔平,另⼀⽅⾯,地⾯也不是绝。对⽔平,因此,这个⾓度会略微⼤于0,考虑到作者实际在草坪之类的场景下运动,因此这个值被设置成。如上图,相邻的两个扫描线束的同⼀列打在地⾯上如AB点所⽰,他们的垂直⾼度差。,计算垂直⾼度差和⽔平⾼度差的⾓度。..

zysss_的博客 775

leetcode之数组中重复的数字

所以临时数组中的索引对应所有可能出现的数字 ,遍历时将出现数字对应到临时数组的索引位置更改元素值 0 改为 1。先判断 ,是否匹配 , 如果不匹配 则进行交换 并且看当前索引位置的值是否与元素的值相同。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。如果可以交换 ,交换之后 ,继续遍历当前位置 如果不可交换 即为重复元素。遍历2 交换2和1 [1,3,2,0,2, 5,3]遍历1 交换1和3 [3,1,2,,0,2,5,3]遍历3 交换3和0 [0,1,2,3,2,5,3]

weixin_60546830的博客 322

CTF---Web---文件包含---01

文章目录前言一、题目描述二、解题步骤1.查看源代码2.文件包含(/etc/passwd)3.解码总结 前言 题目分类: CTF—Web—文件包含 一、题目描述 题目:提示寻找passwd文件 二、解题步骤 1.查看源代码 提示所有图片存储路径是download.php?name=img, 此时name参数的存在就提示此题可能为“文件包含”。 2.文件包含(/etc/passwd) 两种查看方式: 2.1、访问view-source:http://192.168.87.180/download.php

qq_22160557的博客 1391

LeetCode 数组中重复数字

在LeetCode中有四道查找数组中重复数字的类似的题目,先总结一波: LeetCode 217:Contains Duplicate LeetCode 219:Contains Duplicate II LeetCode 220:Contains Duplicate III LeetCode 287:Find the Duplicate Number 一. Contains Dup...

JSJWR的博客 4393

毫米波与太赫兹:十射线模型建模

Pt=1,只考虑地面和前后两面墙的反射,反射系数为0.7。用matlab设计程序并实现该功能。,总计考虑10条路径,求出接收功率随。

SupermarketX的博客 785

TSEND_C指令错误代码解析与实战排错指南

本文详细解析西门子PLC中TSEND_C指令的常见错误代码,包括连接建立、参数配置、资源限制和网络通信等错误类型。针对错误代码80C4等典型问题提供实战排错指南,帮助工程师快速诊断和解决工业通信中的连接故障,提升系统可靠性。

backprop5master的博客 411

【leetcode】442. 数组中重复的数据

🚅【leetcode】442. 数组中重复的数据🚀题目💥leetcode代码模板🚀思路💻代码🍪总结 🚀题目 leetcode原题链接 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。 示例 1: 输入:nums = [4,3,2,7,8,2,3,1] 输出:[2,3] 示例 2:

laplacepoisson的博客 491

ICCV 2025 | 哈工大、清华等提出首个双曲学习框架:HLFormer,革新局部相关视频检索

离原点越远,代表的语义越具体(部分)。现有方法大多在传统的欧几里得空间中对视频和文本进行建模,但这往往会导致对视频内在层次结构的错误表示,从而影响检索的准确性。通过UMAP对学习到的帧嵌入进行可视化(如下图),可以观察到,来自同一时刻的视频帧在嵌入空间中聚集在一起,清晰地展示了模型对时序关系的捕捉能力。下图的双曲空间可视化进一步证实了模型的层次建模能力:离原点越近的点,代表的语义层级越高、粒度越粗糙,反之亦然。:既然文本查询描述的是视频的一部分,那么在几何表示上,文本的嵌入向量应该从属于视频的嵌入向量。

我爱计算机视觉 1080

LeetCode 经典题:“数组中重复的数字”

数组中重复的数字”这道简单题展示了多种解决数组重复元素问题的方法。排序后遍历方法简单直观,但效率相对较低;哈希表法利用了哈希表快速查找的特性,时间复杂度较好,但需要额外的空间;原地交换法巧妙地利用了数组元素的范围特性,在不使用额外空间的情况下解决问题。通过对这道题不同解法的探讨,希望能帮助大家加深对数组操作、排序算法、哈希表等知识的理解,在面对类似问题时能够灵活选择合适的方法。

jukuya的博客 1169

别再手动对照了!用Python+ArcGIS Pro一键搞定三调数据转土地三大类

本文介绍如何利用Python和ArcGIS Pro实现三调数据向土地三大类的自动化转换,大幅提升国土空间规划和土地变更调查的工作效率。通过封装分类规则为Python函数并集成到ArcGIS Pro脚本工具中,解决了传统手动操作耗时且易错的问题,适用于大规模数据处理场景。

weixin_29081101的博客 304

【如何利用扩展卡尔曼滤波解决跟踪毫米波雷达目标】

笛卡尔坐标系(非极坐标系):使用两个垂直的轴(通常是x轴和y轴)来确定一个点的位置。你沿着这两个轴移动确定的距离来找到这个点。极坐标系:使用一个角度和一个距离来确定一个点的位置。首先,你转到一个特定的方向(角度),然后沿着那个方向移动确定的距离来找到这个点。希望这个例子能帮助你理解两种坐标系的基本概念!

小秋 AI SLAM 入门实战教程 885

Leetcode 442:数组中重复的数据

Leetcode 442:数组中重复的数据 题目描述: 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3] 本人low解: 没有任何额外空间。通过交换的方式,从头到尾扫描...

Lyn_Notes 645

如何将 Fiori Elements Object Page Header 工具栏里按钮用 JavaScript 代码设置成禁用状态

本文介绍了如何在SAP Fiori Elements应用中动态控制Object Page工具栏按钮的可用状态。通过UI5 Inspector工具分析发现,这些按钮的enabled属性都双向绑定到/ui/enabled模型字段。在StatusExt.controller.js中,通过获取按钮ID前缀拼接完整控件ID,使用setEnabled(false)方法即可禁用按钮。关键点包括:1)使用extensionAPI获取视图ID前缀;2)注意事件回调中的this上下文绑定;3)通过修改模型字段可同步更新所有绑定

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 372

442. 数组中重复的数据 - 力扣(LeetCode)

442. 数组中重复的数据 - 力扣(LeetCode),用自身元素做标记或一个萝卜一个坑

Onwaier的博客 687

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

golang力扣leetcode 442.数组中重复的数据

442.数组中重复的数据442.数组中重复的数据题解代码 442.数组中重复的数据 442.数组中重复的数据 题解 题目:给一个数组,返回数组中出现两次的数,数是1-n的,并且只出现一次或两次,要求常数的时间复杂度 思路: 1.数组下标0~n-1 数值大小1-n 2.如果v出现过,把v-1下标处的值置为负数 3.如果v-1下标处的值本来就是负数,说明v这个值是第二次遍历到了 4.将v添加到答案中 代码 func findDuplicates(nums []int) (ans []int) { for

清风 857

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LeetCode - 442. 数组中重复的数据

442. 数组中重复的数据 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3] 解题思路: 当序列没有重复元素时,依次将num[i]交换到num[i]-1对应的位置,那么...

virgilshi的博客 335

leetcode442. 数组中重复的数据

leetcode442. 数组中重复的数据 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3] 方法一 题目的意思就是a[i]=i。一个萝卜一个坑,同一个萝...

peony的博客 243

【LeetCode: 442. 数组中重复的数据 + 索引映射】

【LeetCode: 442. 数组中重复的数据 + 索引映射】给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 最多两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间(不包括存储输出所需的空间)的算法解决此问题。

Coder_ljw的博客 753

Leetcode 442. 数组中重复的数据 C++

Leetcode 442. 数组中重复的数据 题目 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3] 题解 哈希表统计数字出现次数,详细过程见代码 代码 vector<int> findDuplicates(vector<int>& nums) { unordered_map<int,in

weixin_43750513的博客 257

leetcode 第 442 题:数组中重复的数据(C++)

442. 数组中重复的数据 - 力扣(LeetCode) 重复元素系列题了:leetcode题目总结_zj-优快云博客 class Solution { public: vector<int> findDuplicates(vector<int>& nums) { vector<int> res; int n = nums.size(); for(int i = 0; i < n; ++i){

zj 305

LeetCode刷题-442. 数组中重复的数据

难度:中等⭐️⭐️⭐️⭐️。

快乐的小小程序猿 229

LeetCode 442. 数组中重复的数据

更多题解尽在每日更新。组队打卡,更多解法等你一起来参与哦!,难度。

m0_64381458的博客 261

LeetCode 442 - 数组中重复的数据

这道题看起来很像“找重复数字”的基础题,但限制条件非常关键: 你必须在 O(n) 时间、O(1) 额外空间 内找出所有出现两次的数字。 因为 nums 的范围是 1 到 n,数组长度也是 n,这其实暗示了一个非常经典的技巧——“原地标记法”。 这个方法特别适合处理“范围可控且和数组下标对应”的问题。

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 731

LeetCode——442. 数组中重复的数据

442. 数组中重复的数据题目描述答案我的答案官方答案方法一:将元素交换到对应的位置方法二:使用正负号作为标记 题目描述 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。 示例 1: 输入:nums = [4,3,2,7,8,2,3,1] 输出:[2,3] 示例 2: 输入:nums =

允诺@晴天的博客 3189

LeetCode 442. 数组中重复的数据 原地哈希详解 Java实现

该方法通过原地哈希的思想,将每个数字放置到其对应的索引位置上,从而找出所有出现两次的整数。这种方法既高效又节省空间,适用于大规模数据。在实际应用中,是一种非常实用的算法技巧。

Lentr0py的博客 441

每天一道leetcode442-数组中重复的数据

微信又改版了,为了方便第一时间看到我的推送,请按照下列操作,设置“置顶”:点击上方蓝色字体“程序员乔戈里”-点击右上角“…”-点击“设为星标”。加星标不迷路!考试结束,班...

WantFlyDaCheng的博客 282
上一篇: 最简单的 AAC 音频码流解析程序
下一篇: 最简单的 H.264 视频码流解析程序
UestcXiye
博客等级 码龄8年 9029粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值