【发布时间】:2013-06-18 11:43:34
【问题描述】:
我想返回排序数组中重复值的个数。
例如:a = { 1, 1, 2, 3, 4, 4 },fratelli(n) 应该返回 2。(它们是 1, 1 和 4, 4)
我尝试使用递归方法,但它不起作用。它总是给我 4 个。
我在问是否有人可以帮助我更好地理解这种编程方法。非常感谢!
功能:
#include <iostream>
using namespace std;
int fratelli(int a[], int l, int r)
{
if (l == r) return 0;
else
{
int c = (l+r) / 2;
int n = fratelli(a, l, c) + fratelli(a, c+1, r);
if (a[l] == a[l+1]) n++;
return n;
}
}
int main()
{
const int _N = 11;
int array[_N] = { 1, 1, 2, 3, 5, 5, 7, 8, 8, 11, 12 };
cout << "\n" << fratelli(array, 0, _N-1);
return 0;
}
【问题讨论】:
-
如果你有一个 = {1,1,1} 它应该返回 2 还是 1?
-
不要使用
_N作为变量名。以下划线和大写字母开头的名称保留用于实现。 -
您确定要使用递归吗?如果我理解正确的话,递归会使问题变得更加困难。
-
@gkovacs90 是的,因为它是一个练习 :) 没有具体说明这种行为......让我们考虑更简单的方法,所以它应该返回 2(考虑 Infested 评论)
标签: c++ algorithm recursion divide-and-conquer