如何判断数组中是否有两个相等的数字 -
例如
array [4] = {2,3,7,2}
如果我在数组中有两个数字,则为true,否则为false。 我是如何实现这个的?
答案 0 :(得分:2)
O(n)方法:
创建哈希表。
扫描数组,使用哈希表计算每个元素的频率。
扫描哈希表。如果频率> 1的话,则为true,否则为false。
O(nlog n)方法:
在 O(nlog n)中对数组进行排序。
从头到尾扫描阵列。保留两个索引:previous和current。检查电流是否等于先前。 - O(n)
答案 1 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
int i, j;
int array[4] = {2, 3, 7, 2};
bool check = false;
for(i = 0; i < 4; i++){
for(j = i + 1; j < 4; j++){
if (j != i && array[j] == array[i])
check = 1;
}
}
printf("%d\n", check);
return 0;
}
答案 2 :(得分:0)
如果您的阵列是密集的,这不是很多数字丢失,您甚至可以在具有内存要求的 O(n)中执行此操作: O(max-min) (这就是为什么你的数组不应该稀疏)。
只需通过
索引数组a
)并计算最小值和最大值 - Theta(n) buffer
) - 最小值+ 1并将其初始化为0
- Theta(最大值 - 最小值) a
,并为每个a[i]
增量buffer[a[i]-minimum]
加一个。如果在上述任何步骤中,您遇到的值buffer[a[i]-minimum]
已经增加,则返回您发现的双重条目 - O(n) 答案 3 :(得分:0)
试试这个 -
int i,j;
unsigned int n = sizeof(arr)/sizeof(int);
for(i=0; i<n-1; i++)
{
for(j=i+1; j<=n; j++)
{
if(a[i]==a[j])
printf("%d", arr[i]);
}
}
通过这种方式,您可以获得重复的所有数字。