查找数组中有多少个不同的值

Vla*_*any 3 java arrays recursion

假设我有一个长度为 的数组,n其中可以出现的唯一值是 0-9。我想创建一个递归函数,返回数组中不同值的数量。

例如,对于以下数组:int[] arr = {0,1,1,2,1,0,1}--> 该函数将返回,3因为此数组中出现的唯一值是0,12

该函数接收一个 int 数组并返回 int ,如下所示:

int numOfValues(int[] arr)
Run Code Online (Sandbox Code Playgroud)

Tun*_*aki 5

如果您使用的是 Java 8,则可以使用简单的单行代码来完成此操作:

private static int numOfValues(int[] arr) {
    return (int) Arrays.stream(arr).distinct().count();
}
Run Code Online (Sandbox Code Playgroud)

Arrays.stream(array)返回IntStream由数组元素组成的 。然后,distinct()返回IntStream仅包含此流的不同元素的 。最后,count()返回此流中的元素数。

请注意,count()返回 along因此我们需要int在您的情况下将其转换为 an 。


如果你真的想要一个递归解决方案,你可以考虑以下算法:

  • 如果输入数组的长度为 1,则该元素是不同的,因此答案为 1。
  • 否则,让我们删除第一个元素并计算这个新数组上不同元素的数量(通过递归调用)。然后,如果第一个元素包含在这个新数组中,我们不再计算它,否则我们添加 1。

这应该让您有足够的洞察力来在代码中实现这一点。