【问题标题】:Recursive way to count distinct number of elements in array计算数组中不同元素数量的递归方法
【发布时间】:2019-06-08 07:12:08
【问题描述】:

假设我有这个数组:ARR = {5, 7, 3, 3, 7, 5} 而且我也有大小(在本例中为 = 6),因此递归函数应返回 3。

这是函数/方法的声明:

int f(arr, size);

我试过这个东西:

count = 0;
if(size == 1)
   return 1;
if(x[i] != f(arr, size-1)
    count++;

return count;

但它不起作用,因为 f(arr, size-1) 不会遍历数组的所有元素并进行比较。

希望你们能帮忙!

【问题讨论】:

    标签: java algorithm recursion


    【解决方案1】:

    这是一种方法:

    private static int f(int[] arr, int size) {
        if (size <= 1) return 0; // there can't be duplicates if there are not even 2 elements!
        return f(arr, size - 1) + (inArray(arr, size - 1, arr[size - 1]) ? 1 : 0);
    }
    
    private static boolean inArray(int[] arr, int size, int elem) {
        if (size == 0) return false;
        return arr[size - 1] == elem || inArray(arr, size - 1, elem);
    }
    

    基本上逻辑是这样的:

    • size 表示arr 中我们真正关心的前 N ​​个元素。
    • 如果size 小于2,我们知道不可能有任何重复,所以返回0。
    • 现在,对于递归情况,我们返回 1 或 0,具体取决于最后一个元素是否在数组的其余部分中,加上数组其余部分中的任何重复项(“最后一个元素”表示 array[size - 1]而“其余”表示使用size - 1 调用函数。)
    • 为了判断一个元素是否在数组中,我也使用了递归方法,思路类似(检查最后一个元素是否为elem,然后检查其余元素是否包含elem)。

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2019-04-03
      相关资源
      最近更新 更多