
剑指 Offer 03. 数组中重复的数字
发布日期:2021-05-18 05:02:45
浏览次数:22
分类:精选文章
本文共 1060 字,大约阅读时间需要 3 分钟。
题目描述
本题要求找出 vector 中重复出现的数字。方法一和方法二分别提供了两种不同的解决方案。
方法一:使用 set
思路
通过定义一个 set 来记录已遍历过的数字。遍历 vector nums 中的每一个数字,如果当前数字已经存在于 set 中,则它即为重复数字;反之,将其添加到 set 中并继续下一个数字的检查。这种方法的时间复杂度为 O(n),因为set的查找和插入操作均为 O(1)的平均时间复杂度。
代码
class Solution {public: int findRepeatNumber(vector & nums) { set s; for (int i = 0; i < nums.size(); ++i) { if (s.find(nums[i]) != s.end()) { return nums[i]; } else { s.insert(nums[i]); } } return -1; }};
方法二:暴力搜索(会超时)
思路
通过双重循环检查每个数字是否与后续数字重复。这种方法虽然简单,但在最坏情况下(如所有数字均为重复数)动作复杂度为 O(n²),因此适用于小数据量的场景。此方法缺点明显,当数据规模较大时可能导致超时。
代码
class Solution {public: int findRepeatNumber(vector & nums) { for (int i = 0; i < nums.size(); ++i) { for (int j = i + 1; j < nums.size(); ++j) { if (nums[i] == nums[j]) { return nums[i]; } } } return -1; }};
总结
这两种方法各有优劣。方法一的时间复杂度更高效,适合大规模数据;方法二则简单易懂,但可能在大数据情况下表现不佳。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月21日 03时04分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
优先级队列2
2019-03-13
TiKV 源码解析系列文章(十三)MVCC 数据读取
2019-03-13
1900分图论 : 1183E1 LCA + Kruskal
2019-03-13
(建议收藏)计算机网络:传输层概述、UDP协议与可靠传输协议习题解析与拓展
2019-03-13
Android 开发常用的工具类(更新ing)
2019-03-13
EasyUI的简单介绍
2019-03-13
初次安装webpack之后,提示安装webpack-cli
2019-03-13
java中带参数的try(){}语法——关闭资源
2019-03-13
kafka+storm+hbase整合试验(Wordcount)
2019-03-14
VMware克隆虚拟机后重启network失败
2019-03-14
Hbase压力测试
2019-03-14
StreamReader & StreamWriter
2019-03-14
C#中的类、方法和属性
2019-03-14
Python爬取清朝末年医书:《醉花窗医案》,看看病症情况
2019-03-14
Python爬虫训练:爬取酷燃网视频数据
2019-03-14
Python数据分析入门(十九):绘制散点图
2019-03-14
C++版浙大PAT乙级1069(20分)测试点3答案错误解决方法
2019-03-14
浏览器刷新页面
2019-03-14