计算C中的重复项

时间:2013-04-09 03:56:14

标签: c arrays duplicates

如果我将阵列设置为:

test[10] = {1,2,1,3,4,5,6,7,8,3,2}

我想返回数字3,因为有重复1,重复2和重复3.我怎样才能实现这一点?效率并不重要。

4 个答案:

答案 0 :(得分:2)

您可以使用此代码

int main()
{
 int test[10] = {1,2,1,3,4,5,6,7,8,3,2};
 int i,j,dupliCount = 0;
 for (i =0; i<(sizeof(test)/sizeof(int));i++)
  {
  for(j=i+1;j<(sizeof(test)/sizeof(int));j++)
   {
    if (test[i] == test[j])
     {
      ++dupliCount;
      break;
     }
   }
  }
printf("duplicate count %d",dupliCount);
}

答案 1 :(得分:1)

首先,您必须对数组进行排序,以便更容易找到重复数据。

以下是排序(冒泡排序)的示例:

void bubbleSort(int numbers[], int array_size) {
    int i, j, temp;

    for (i = (array_size - 1); i > 0; i--) {
        for (j = 1; j <= i; j++) {
            if (numbers[j-1] > numbers[j]) {
                temp = numbers[j-1];
                numbers[j-1] = numbers[j];
                numbers[j] = temp;
            }
        }
    }
}

然后再次遍历它,找出values[i]==values[i+1]

注意:当您创建for循环时,将其缩短1个长度以补偿values[i+1],因此它不会超出范围。

答案 2 :(得分:1)

我花了一些时间来调试它。因为它应该是int test[11] = {1,2,1,3,4,5,6,7,8,3,2}而不是int test[10]。每个元素的订阅量为0到10.因此总共有11个元素。

    #include <stdlib.h>
    #define LEN (11)
    int test[LEN] = {1,2,1,3,4,5,6,7,8,3,2};
    void sort(int n, int *test){//sort them, use whatever you like
        int i,j,y;
        for (i=0;i<n;++i){
            for (j=i+1;j<n;++j)
                if (test[i]>test[j]){
                    y=test[i];
                    test[i]=test[j];
                    test[j]=y;
                }
            }
    }
    int main(){
        sort(LEN,test);//sort first
        int cnt = 0 , i ;
        for(i=1;i<LEN;++i)
            cnt += (test[i]==test[i-1]);//count duplicates
        printf("%d\n",cnt);//print result

    }

答案 3 :(得分:1)

如果内存空间无关紧要(我的意思是不受内存使用限制),但运行时间很重要和< strong>你知道数组中的值不大于数组的大小,那么Bucket Sort听起来像是工作的人。它将在O(n)而不是O(nlgn)中完成工作(如果您决定先对数组进行排序)。

int main()
{
    int test[LEN] = {1,2,1,3,4,5,6,7,8,3,2};
    int ndup = 0;
    int bucket_array[LEN] = {0};

    for (i = 0; i < LEN; i++) {
        if (bucket_array[test[i]]++) {
            ndup++;
        }
    }

    printf("%d duplicates\n", ndup);
    return 0;
}

我没有编译它,但我想它应该可以完成这项工作。

注意:非常感谢jim balter的有用评论。