面试题3:数组中重复的数字
来源:互联网 发布:马赛克复原软件 编辑:程序博客网 时间:2024/06/06 01:47
题目:在一个长度为n的数组里,所有数字都在0 - n-1范围内,数组中的某些数字是重复的,但不知道有几个重复的。请找出其中的任意一个重复数字。
举例:{2,3,1,0,2,5,3对应重复的数字为2或者3。
方法一,哈希表法:
bool duplicate(int numbers[], int length, int* duplication) {//duplicate重复 //与书上的解法不同 空间复杂度O(length) 时间复杂度为O(length) vector<int > v; v.resize(length);//确定容器大小 for(int i = 0; i < length; i++) { v[numbers[i]]++; if(v[numbers[i]] >= 2) { *duplication = numbers[i];// return true; } } return false; }方法二,下标交换:
bool duplicate(int numbers[], int length, int* duplication) {//duplicate重复 //时间复杂度O(n),空间复杂度O(1) if(length <= 0 || numbers == nullptr) return false; for(int i = 0; i < length; ++i) { if(numbers[i] >= length || numbers[i] <= 0) return false; } for(int i = 0; i < length; ++i) { while(i != numbers[i]) {if(numbers[i] == numbers[numbers[i]]) { *duplication = numbers[i]; return true; } int tmp = numbers[i]; numbers[i] = numbers[numbers[i]]; numbers[tmp] = tmp;//这里要注意 不是numbers[numbers[i]] 而是numbers[tmp] } } return false; }
阅读全文
0 0
- 面试题3:数组中重复的数字
- 面试题3:数组中重复的数字
- 剑指offer--面试题3:数组中重复的数字
- 【剑指offer】面试题3:数组中重复的数字
- 【剑指offer】面试题3:数组中重复的数字
- 剑指offer 面试题3:数组中重复的数字
- 面试题3:数组中重复的数字
- 面试题51:数组中重复的数字
- 面试题55:数组中重复的数字*
- 剑指offer-面试题51:数组中重复的数字
- 面试题51:数组中重复的数字
- 剑指offer--面试题51:数组中重复的数字
- 面试题51-数组中重复的数字
- 剑指offer-面试题51-数组中重复的数字
- 剑指offer 面试题51 数组中重复的数字
- 面试题51. 数组中重复的数字
- 剑指offer面试题[51]-数组中重复的数字
- 面试题51:数组中重复的数字
- Spring Data Redis(sdr)-----序列化
- KLEE error reports
- ECharts 去掉地图(map)的指示图(visualMap)
- 深入理解JAVA集合系列二:ConcurrentHashMap源码解读
- solr历史版本
- 面试题3:数组中重复的数字
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字
- HDU-1233-还是畅通工程(最小生成树kruscal)
- fork函数与I/O函数之间的交互关系
- 深入理解JAVA I/O系列五:对象序列化
- [PowerShell入门]关系运算和逻辑运算
- C#中的异常过滤器&try catch语块儿
- 语言基础模块-模拟登陆作业以及Extra作业
- 解决AngularJS初始化闪现问题