面试题3:数组中重复的数字
2017-06-26 15:37
183 查看
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
方法1:哈希表。从头到尾扫描数组中的每个数字,每扫描一个数字,都可以用O(1)的时间判断哈希表里是否包含了该数字。如果哈希表里还没有这个数字,就把它加入哈希表。如果哈希表里已经存在该数字,就找到一个重复的数字。这个算法的时间复杂度是O(n),空间复杂度是O(n)。
#include <iostream> using namespace std; //数组长度 const int length = 100; int main() { int numbers[100]; int n; std::cout << "输入数组大小" << std::endl;; std::cin >> n; int i = 0; for(;i<n;++i) { std::cin >> numbers[i]; } int haxi ; for(i=0;i<n;++i) haxi[i] = 0; for(i=0;i<n;++i) { if(haxi[numbers[i]]==0) haxi[numbers[i]]++; else { std::cout << numbers[i] << std::endl; break; } } }
相关文章推荐
- 【我解C语言面试题系列】009 特殊的去除数组中重复数字问题
- [每日练习]Amazon面试题:数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字,不可以用额外的空间
- 剑指Offer面试题51:数组中的重复数字
- 剑指offer--面试题3:数组中重复的数字
- 面试题3:数组中重复的数字
- 把一个整形数组中重复的数字去掉 - 微软面试题
- 剑指offer-面试题51:数组中重复的数字
- 剑指offer--面试题51: 数组中重复的数字
- 剑指Offer面试题51(Java版):数组中重复的数字
- 面试题51. 数组中重复的数字
- 【我解C语言面试题系列】009 特殊的去除数组中重复数字问题
- 面试题55:数组中重复的数字*
- 《剑指Offer》学习笔记--面试题51:数组中重复的数字
- c#面试题 查找整型数组中重复出现次数最多的数字,次数相同数字按从小到大排序
- 把一个整形数组中重复的数字去掉 - 微软面试题
- 【剑指Offer学习】【面试题51:数组中重复的数字】
- 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字
- 【我解C语言面试题系列】008 去除数组中重复数字问题
- 剑指offer面试题3-数组中重复的数字 java
- 剑指offer-面试题51-数组中重复的数字