题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1。数据范围:0≤n≤10000 。
进阶:时间复杂度O(n) ,空间复杂度O(n)
示例
输入:2 3 1 0 2 5 3
返回值:2
(说明:2或3都是对的)
思路
-
定义一个数组,将其中全部元素的值赋值为0。
-
将输入的数字作为下标存进数组中,即输入2,则下标为2的元素+1,这样就可以统计下标元素的个数。
-
用一个信号量flag=0判断,下标对应的元素是否大于1。循环遍历数组元素,当元素个数大于1时,表示出现了重复元素,flag置为1,输出下标,结束循环。
-
最后判断flag是否为0,为0则表示数组元素没有>1的,即数组元素不重复。
具体实现
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[100]={0},n=0,x,flag=0;
while(cin>>x){
a[x]++;
if(cin.get()=='\n') break;
n++; //计算数组长度
}
for(int i=0; i<n; i++){
if(a[i]>1){
cout<<i;
flag=1;
break;
}
}
if(flag==0) cout<<"没有重复元素";
return 0;
}