您的位置:首页 > Web前端

剑指offer系列之49:数组中重复的数字

2016-04-12 21:40 288 查看
题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。

思路:此题的思路还是比较简单的,与之前找出只出现一次的数字的题目有些类似,基本思路还是创建一个Map容器,key是出现的数字,value则是该数字出现的次数。在遍历数组的过程中,只要容器中已经出现了该数字,那么就直接返回给数组,并结束循环。建立一个简单的哈希表即可。

public boolean duplicate(int numbers[],int length,int [] duplication) {
if(numbers == null || length <= 1){
return false;
}

int[] hash = new int[length];
for(int i = 0;i < hash.length;i++){
hash[i] = 0;
}

for(int i = 0;i < numbers.length;i++){
hash[numbers[i]]++;
}
int j = 0;
for(int i = 0;i < hash.length;i++){
if(hash[i] >= 2){
duplication[j++] = i;
break;
}
}
if(j == 1)
return true;
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: