以递归方式在C中查找数组中的重复条目

时间:2015-06-12 08:15:03

标签: c arrays recursion

我试图编写一个递归函数来查找整数数组中的重复项。例如,如果数组为:{4,1,4,3,2,3},则应返回2。 我尝试了类似mergesort的方法,但没有成功。有人可以帮忙吗?

我的尝试(仅适用于有序数组):

int count(int arr[], int bot, int top){
  if(bot==top) return 0;
  else{
    int med = (bot+top)/2;
    int n = count(arr, bot, med) + count(arr, med+1, top);
    if(arr[med]==arr[med+1]) n++;
    return n;
  }
}

1 个答案:

答案 0 :(得分:1)

你只是在检查arr[med]==arr[med+1]当你遇到类似111的情况时会出现问题,那么计数将变为2,但计数实际应该是1。因此,添加一个额外的标志来检查相同的元素是否重复。

对数组进行排序。可能你可以使用合并排序或其他东西来做到这一点,然后这样的事情应该有效!

#include <stdio.h>

int main(void) {
    // your code goes here
    int a[16] = {1,1,1,1,1,1,1,1,1,1,1,2,2,3,3,5};
    int out = count(a,0,15);
    printf("%d\n",out);
    return 0;
}

int count(int arr[], int bot, int top){
  int flag = 0;
  if(bot==top) return 0;

  else{
    int med = (bot+top)/2;
    int n = count(arr, bot, med) + count(arr, med+1, top);
    if(arr[med]==arr[med+1])
    {
        flag = arr[med-1];
        if(flag != arr[med])
            n++;
    }
    return n;

    }
}