9.19 小红书笔试 AC 代码
1. ABCD 四个组件拼装,判断合格的同时修改数量,最后取四者中最小值即可。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a1 = sc.nextInt(), a2 = sc.nextInt(), a3 = sc.nextInt(), a4 = sc.nextInt(), x = sc.nextInt();
int[] a = {a1, a2, a3, a4};
sc.nextLine();
for (int i = 0; i < 4; i++) {
String str = sc.nextLine();
String[] nums = str.split(" ");
for (String num : nums) {
if (Integer.parseInt(num) < x) {
a[i] = a[i] - 1;
}
}
}
int min = Arrays.stream(a).min().getAsInt();
System.out.println(min);
} public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), k = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int[] dp = new int[n + 1];
Arrays.fill(dp, 100);
dp[0] = 0;
for (int i = 1; i < n; i++) {
for (int j = 1; j <= k; j++) {
if (i - j < 0) break;
dp[i] = Math.min(dp[i], dp[i - j] + Math.max(0, arr[i] - arr[i - j]));
}
}
System.out.println(dp[n - 1]);
} 3. 滑动窗口:当窗口内任一元素达到 k 个时,窗口收缩。窗口收缩时,当前子数组右边的 n - right 个元素逐一加入该子数组,都满足题目条件,所以统计时是加 n - right 而非加 1。 public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), k = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int left = 0, right = 0;
int cnt = 0;
Map<Integer, Integer> window = new HashMap<>();
while (right < n) {
int num1 = arr[right];
window.put(num1, window.getOrDefault(num1, 0) + 1);
while (window.get(num1) == k) {
int num2 = arr[left];
left++;
window.put(num2, window.get(num2) - 1);
cnt = cnt + (n - right); }
right++;
}
System.out.println(cnt);
}
OPPO公司福利 1111人发布