我有一个名为m1(int input1,int input2,int[] input3)的方法,该方法具有三个参数。无论在input1中定义什么值,input3[]中应包含的元素个数均相同,即input3的长度与input1的值相同。无论在input2中定义什么值,迭代都将在int input3中进行直到达到该长度。而且它必须给计数提供它迭代了多少个元素,但是如果重复相同的数目,则计数值将不会增加。对于第一次,计数将增加,但是一旦没有重复,计数将保持不变,并且当计数将得到不同的元素时,计数将增加,但是将进行迭代直到在input2中提到的长度。

例:

int input1 =5;
int input2= 3;
int[] input3 ={1,2,1,3,4};


预期:
所以这里的input1是5,所以input3的长度也是5。
这里的input2值为3,因此在迭代input3时必须迭代直到第2个索引,即直到length为3。因此,这里的迭代将一直进行到{1,2,1},并且计数必须为2,因为重复1 2次。

最佳答案

我们不需要第一个参数,我们可以使用input3.length来获取该属性。对于该问题,我提供了两种解决方案,

一种是使用Set,另一种是使用流。 Set是一个数据结构,它使项目保持唯一的含义,即使您添加两次项目,它也只会保留其中一项,因此您可以从中获得不同的元素计数。

第二个是使用Java流API,您可以仅使用Limit和不同的操作来获得唯一计数。

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

class Solution {
    public static int findUniqueCountUsingSet(int length, int range, int[] input) {
        Set<Integer> integers = new HashSet<>();
        for (int i = 0; i < range; i++) {
            integers.add(input[i]);
        }
        return integers.size();
    }

    public static int findUniqueCountUsingStream(int length, int range, int[] input) {
        return (int) Arrays.stream(input).limit(range).distinct().count();
    }

    public static void main(String[] args) {
        System.out.println(findUniqueCountUsingSet(5, 3, new int[]{1, 2, 1, 3, 4}));
        System.out.println(findUniqueCountUsingStream(5, 3, new int[]{1, 2, 1, 3, 4}));
    }
}

09-27 17:55