03数组中重复的数字
描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
数据范围:
0≤n≤10000
进阶:时间复杂度O(n) ,空间复杂度O(n)
示例1:
输入:[2,3,1,0,2,5,3]
返回值:2
说明:2或3都是对的
方法1:
采容器,对容器中的元素进行排序,然后判断是否有重复的数字。
时间复杂度O(nlogn)
int duplicate(vector<int>& numbers) { // write code here sort(numbers.begin(), numbers.end()); for(int i =0; i<numbers.size(); i++) { if(numbers[i] == numbers[i+1]) return numbers[i]; } return -1; }
方法2:
采用set容器,创建一个set容器,在数组中找set末尾元素,如果没找到,就将数组的元素i插入到set容器中,如果找到了,就返回i。
否则就是返回-1。
set是关联式容器,用来存储同一数据类型,且set中的每个元素的值都是唯一的,系统会根据元素的值自动进行排序。
时间复杂度O(n) , 空间复杂度O(n)
int duplicate(vector<int>& numbers) { // write code here set<int> s; for(int i =0; i<numbers.size(); i++) { if( s.find(numbers[i]) ==s.end()) s.insert(numbers[i]); else return numbers[i]; } return -1; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通