当前位置: 首页 > article >正文

京东笔试题

和谐敏感词

🔗 题目地址

在这里插入图片描述

🎉 模拟

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        String s = scanner.next();
        String[] words = new String[n];

        for (int i = 0; i < n; i++) {
            words[i] = scanner.next();
        }
        boolean[] st = new boolean[s.length()];
        for (int i = 0; i < n; i++) {
            int pos = 0;
            while(true) {
                pos = s.indexOf(words[i], pos);
                if(pos == -1)
                    break;
                for (int j = pos; j < pos + words[i].length(); j++)
                    st[j] = true;
                pos += 1;
            }
        }
        char[] ans = s.toCharArray();
        for(int i = 0; i < st.length; i++)
            if(st[i])
                ans[i] = '*';

        System.out.println(ans);
    }
}

每个区间内第k小的数

🔗 题目地址
在这里插入图片描述

🎉 大根堆


import java.util.PriorityQueue;
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();
        int[] a = new int[n];
        for (int i = 0; i < n; i++)
            a[i] = sc.nextInt();

        PriorityQueue<Integer> heap = new PriorityQueue<>((o1, o2) -> o2 - o1);
        for (int i = 0; i < n; i++) {
            if (i < k - 1) {
                heap.add(a[i]);
                System.out.print(-1 + " ");
                continue;
            }
            if(heap.size() < k)
                heap.add(a[i]);
            else{
                if(a[i] < heap.peek()){
                    heap.poll();
                    heap.add(a[i]);
                }
            }
            System.out.print(heap.peek() + " ");
        }
    }
}

挑选战队

🔗 题目地址
在这里插入图片描述

🎉 二分 + 状态压缩DP

import java.util.Scanner;

public class Main {
    private static final int INT_MAX = Integer.MAX_VALUE;
    static int n,m,k;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt(); // 读取样例个数

        for (int testCase = 0; testCase < t; testCase++) {
              n = sc.nextInt(); // 读取n
              m = sc.nextInt(); // 读取m
              k = sc.nextInt(); // 读取k
            int[][] attr = new int[n][m]; // 创建属性数组

            // 读取每个队员的属性值
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    attr[i][j] = sc.nextInt();
                }
            }

            // 二分查找初始化
            int l = 1, r = 1005, ans = 0;
            while (l < r) {
                int mid = (l + r) >> 1; // 计算中间值
                // 检查是否可以通过选择k个人达到战斗力mid
                if (isPossible(attr, mid)) {
                    ans = mid; // 更新答案
                    l = mid + 1; // 增大左边界
                } else {
                    r = mid; // 缩小右边界
                }
            }
            System.out.println(ans); // 输出结果
        }
        sc.close();
    }

    /**
     * 检查是否可以通过选择k个人达到战斗力mid
     * @param attr 队员的属性数组
     * @param mid 当前尝试的战斗力
     * @return 是否可以达到战斗力mid
     */
    private static boolean isPossible(int[][] attr, int mid) {
        int fullMask = (1 << m) - 1; // 全属性掩码


        int[] masks = new int[n]; // 每个队员的属性掩码
        for (int i = 0; i < n; i++) { // 枚举每个队员
            int mask = 0;
            for (int j = 0; j < m; j++) {// 枚举队员的每个属性
                if (attr[i][j] >= mid) {
                    mask |= (1 << j); // 更新掩码
                }
            }
            masks[i] = mask; // 存储掩码
        }
        int[] dp = new int[1 << m]; // dp[state]:表示达到 state 的状态需要的最少人数
        for (int i = 0; i < dp.length; i++) {
            dp[i] = INT_MAX; // 初始化dp数组
        }
        dp[0] = 0; // 初始状态
        // 更新dp数组
        for (int i = 0; i < n; i++) {
            int pmask = masks[i]; // 当前队员的属性掩码
            for (int state = 0; state < fullMask; state++) {
                if (dp[state] != INT_MAX) { // 起点是 state,借助 pmask 转移,重点是(state|pmask)
                    dp[state | pmask] = Math.min(dp[state | pmask], dp[state] + 1); // 更新dp数组
                }
            }
//            for (int state = fullMask; state >= 0; state--) {
//                if (dp[state] != INT_MAX) { // 起点是 state,借助 pmask 转移,重点是(state|pmask)
//                    dp[state | pmask] = Math.min(dp[state | pmask], dp[state] + 1); // 更新dp数组
//                }
//            }
        }

        return dp[fullMask] <= k; // 检查是否可以通过选择k个人达到战斗力mid
    }
}



http://www.kler.cn/news/361714.html

相关文章:

  • 极狐GitLab 发布安全补丁版本 17.4.2, 17.3.5, 17.2.9
  • [mysql]mysql的全部单行函数
  • Nacos相关问题
  • Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)
  • YOLOv11改进策略【Conv和Transformer】| ACmix 卷积和自注意力的结合,充分发挥两者优势
  • 「毅硕|生信教程」 micromamba:mamba的C++实现,超越conda
  • 【Python数据分析】利用Pandas库轻松处理大数据
  • LRDDR4芯片学习(三)——命令和时序
  • MySQL 中如何优化 DISTINCT 查询:基于 Java 的实践与应用
  • git-合并连续两次提交(一个功能,备注相同)
  • [区间dp]合并石子升级版
  • 如何借助通达信API构建自动化交易系统?
  • leetcode22.括号生成
  • 从Docker拉取镜像一直失败超时?这些解决方案帮你解决烦恼
  • STM32_实验4_控制蜂鸣器
  • elasticsearch性能测试工具esrally
  • huggingface的数据集下载(linux下clone)
  • 好用的AI工具:探索智能生活的无限可能
  • Java 中接口的具名实现和匿名实现
  • 简述微服务高可用之Sentinel、Seate
  • 基于深度学习的地球观测中的目标检测
  • R语言医学数据分析实践-高级回归分析
  • Spring Boot Web智慧社区平台:设计与实现
  • 【Java】并发韵律:多线程编程的深度探索与艺术实践
  • 问题:uniApp 开发中使用 padding: 0 10px,右内边距不起作用
  • 装饰器模式知识分享:Android (Kotlin) 与 iOS (Swift) 实现