难度简单58收藏分享切换为英文关注反馈
在大小为 2N
的数组 A
中有 N+1
个不同的元素,其中有一个元素重复了 N
次。
返回重复了 N
次的那个元素。
示例 1:
输入:[1,2,3,3]
输出:3
示例 2:
输入:[2,1,2,5,3,2]
输出:2
示例 3:
输入:[5,1,5,2,5,3,5,4]
输出:5
提示:
4 <= A.length <= 10000
0 <= A[i] < 10000
A.length
为偶数
解题思路:
方法1:根据提示数组长度和数组元素均为10000,可考虑使用hash表统计各个元素出现的次数
方法2:排序数组,统计相同元素出现次数
方法1:
#define NUM 10000
int repeatedNTimes(int* A, int ASize){
int *hash = (int *)malloc(NUM * sizeof(int));
memset(hash, 0, NUM * sizeof(int));
int i;
for (i = 0; i < ASize; i++) {
int temp = A[i];
hash[temp]++;
if (hash[temp] * 2 == ASize) {
return temp;
}
}
return 0;
}
方法2:
int Compare (const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int repeatedNTimes(int* A, int ASize){
qsort(A, ASize, sizeof(int), Compare);
int count = 0;
int curr = A[0];
int i;
for (i = 0; i < ASize; i++) {
int temp = A[i];
if (temp == curr) {
count++;
if (count * 2 == ASize) {
return temp;
}
} else {
curr = temp;
count = 1;
}
}
return 0;
}