如何判断数组中是否有两个相等的数字

时间:2013-12-25 10:57:55

标签: c arrays

如何判断数组中是否有两个相等的数字 -

例如

  

array [4] = {2,3,7,2}

如果我在数组中有两个数字,则为true,否则为false。 我是如何实现这个的?

4 个答案:

答案 0 :(得分:2)

O(n)方法:

  1. 创建哈希表。

  2. 扫描数组,使用哈希表计算每个元素的频率。

  3. 扫描哈希表。如果频率> 1的话,则为true,否则为false。


  4. O(nlog n)方法:

    1. O(nlog n)中对数组进行排序。

    2. 从头到尾扫描阵列。保留两个索引: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) (这就是为什么你的数组不应该稀疏)。

只需通过

索引数组
  1. 浏览整个数组(a)并计算最小值和最大值 - Theta(n)
  2. 创建一个大小最大的新数组(buffer) - 最小值+ 1并将其初始化为0 - Theta(最大值 - 最小值)
  3. 再次浏览a,并为每个a[i]增量buffer[a[i]-minimum]加一个。如果在上述任何步骤中,您遇到的值buffer[a[i]-minimum]已经增加,则返回您发现的双重条目 - O(n)
  4. 如果您设法完成了最后一步而没有返回,请返回没有 - O(1)

答案 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]);  
      }
    }

通过这种方式,您可以获得重复的所有数字。