抽象一下题意,从 n 个数里面选择 k 个数,问最多能选几个不同的
可以用 set 将 数组去重后,set 的大小即为所有不同数的个数。
最终的答案为 min(set.size(),k)
import sys
input = lambda:sys.stdin.readline().strip()
n, k = map(int, input().split())
s = set(list(map(int, input().split())))
print(min(k, len(s)))
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 读取n和k的值
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        // 用Set来存储不同的数字
        Set<Integer> set = new HashSet<>();
        // 读取输入的数字并存入Set中
        for (int i = 0; i < n; i++) {
            int num = scanner.nextInt();
            set.add(num);
        }
        // 输出k和Set大小中的较小值
        System.out.println(Math.min(k, set.size()));
        scanner.close();
    }
}
import java.util.*;
// 注意类名必须为Main
class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();
        HashSet<Integer> set = new HashSet<>();
        for (int i = 0; i < n; i++) {
            set.add(in.nextInt());
        }
        if(set.size() >= k){
            System.out.println(k);
        }else{
            System.out.println(set.size());
        }
    }
}
        小红有一个长为n的数组a。他定义一个数组的权值为:数组中不同的数字个数。
小红希望从数组a中选出在个数子,使得这k个数字组成的数组权值最大,请你帮帮小红。
输人包含两行
第一行两个正整效n,k(1≤k≤n≤105),表示数组a的长度和需要选择的数字个数 第二行n个正整数ai(1≤ai≤109),表示数组的元素值
输出包含一行一个正整数,表示选出k个数字组成数组的最大权值。
输入
4 3
1 1 2 2
输出
2
说明
可以选择1,1,2,构成数组,权值为2