抽象一下题意,从 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