数组中重复的数字——寻找重复数字的高效算法
在日常工作和生活中,经常会遇到需要查找数组中是否有重复元素的情况。若数组长度较小,可以直接使用两重循环进行比较;但若数组长度较大,这种方法将带来不必要的时间和空间复杂度,因此需要寻找更高效的算法。
一种简单而高效的方法是通过哈希表来实现。具体思路为:遍历数组,将每个元素放入哈希表中;若当前元素已存在于哈希表中,则说明该元素为重复元素。但是,需要注意的一点是,若采用散列函数实现哈希表,可能会存在冲突的情况,导致多个元素映射到同一位置,从而影响效率。
以下是基于哈希表实现的代码:
#include <stdio.h>
#include <stdlib.h>
int findRepeatNumber(int* nums, int numsSize){
int *hashTable = (int *)calloc(numsSize, sizeof(int));
for(int i=0;i<numsSize;i++){
if(hashTable[nums[i]]==1){
return nums[i];
}else{
hashTable[nums[i]]=1;
}
}
return -1;
}
int main(){
int nums[]={2, 3, 1, 0, 2, 5, 3};
int numsSize=sizeof(nums)/sizeof(int);
int result=findRepeatNumber(nums, numsSize);
printf("