如何用Java实现现有正整数k,若数字a属于区间[0, k]中,则称为a填充k,在长度为n的序列A中,每一个元素都可能对k进行填充,也可能存在重复填充。请找出最小未填充的那位数,若不存在则为-1。(n,k,a < 2^15) 输入 第一行,两个正整数,n,k 第二行,n个非负整数 输出
时间: 2023-02-07 12:21:30 浏览: 64
可以使用桶的思想来解决这个问题。具体来说,首先创建一个大小为k+1的布尔数组,用于标记每个数是否填充过。然后遍历序列A,如果遇到的数小于等于k,就将对应的桶设为true。最后,遍历这个布尔数组,找到第一个值为false的位置,并输出它的下标(注意,数组下标从0开始),如果遍历完整个数组都没有找到,就输出-1。
下面是Java代码示例:
```
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
boolean[] filled = new boolean[k+1]; // 创建桶
for (int i = 0; i < n; i++) {
int num = sc.nextInt();
if (num <= k) {
filled[num] = true; // 填充数
}
}
for (int i = 0; i <= k; i++) {
if (!filled[i]) {
System.out.println(i); // 输出最小未填充的数
return;
}
}
System.out.println(-1); // 如果没有未填充的数,输出-1
}
}
```