我试图编写一个递归函数来查找整数数组中的重复项。例如,如果数组为:{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;
}
}
答案 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;
}
}