假设我有一个长度为 n
的数组,其中唯一可以出现的值是 0-9。我想创建一个递归函数,返回数组中不同值的数量。
例如,对于以下数组:int[] arr = {0,1,1,2,1,0,1}
--> 函数将返回 3
,因为此数组中出现的唯一值是 0
、1
和 2
。
函数接收一个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/