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

标签 java arrays recursion

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

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

函数接收一个int数组并返回int 像这样:

int numOfValues(int[] arr)

最佳答案

如果你使用的是 Java 8,你可以用一个简单的一行代码来做到这一点:

private static int numOfValues(int[] arr) {
    return (int) Arrays.stream(arr).distinct().count();
}

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

请注意,count() 返回一个 long,因此我们需要根据您的情况将其转换为 int


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

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

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

关于java - 查找数组中有多少个不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33036434/

相关文章:

arrays - 数组到 Excel 范围仅给出数组的第一个元素

recursion - Typo3 7.6 激活递归删除?

递归,并且不通过 return 语句结束递归

java - 在二维数组中搜索一维数组的索引并逐行返回java

java - Java 流中的flush() 的用途是什么?

java - 将字节数组转换为字符串,字符串传输后无法转换回来

ios - swift中的嵌套递归函数

java - 明确地为二维数组赋值?

java - 如何更改 swing 应用程序的默认操作系统框架

php - 如何使数组第一个值作为第二个值的键作为php数组中的值