首页 > 9.19 小红书笔试 AC 代码
头像
ShawnLee0223
编辑于 2022-09-19 18:22 天津
+ 关注

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);
    }

2. 典型的动态规划:当前位置 dp[i] 的最小值,由之前 k 个元素决定。
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);
    }



全部评论

(12) 回帖
加载中...
话题 回帖