华为机试(JAVA)真题Od【A卷+B卷】2023最新版

在这里插入图片描述

大家好,我是哪吒。

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

  • 专栏福利:限时订阅49.9,订阅后可加入华为OD刷题群,获得哪吒优先答疑机会(华为OD刷题指导,远程代码调试),群里大佬众多可以抱团取暖,群友刷题经验分享,考试经验分享。

一、机考攻略

三道中等难度题目,总分400分,前两道均为100分,后一道为200分,每道题的时间限制为1S(慎用暴力方法,实在没办法,也可!)。

机考分数是按照题目用例的通过数量的比例算分数,若有的题做不出来,可尽力去写,一些用例通过就有分数。

机考时长2个半小时,若以冲刺机考最高分为目的,则做题时间分配前两道题40分钟,最后一题70分钟(平时练习可以按照40分钟的时限)。

机考分数线根据招聘目标院校和非目标院校有不同,不同华为招聘部门也会有差异,比如前者机考通过线为150分,后者机考通过线为320分。

若以通过机考线为目的,根据自身情况来进行做题时长配置。

  • 机考全程需要打开摄像头,摄像头中不能出现其他人或者宠物,带个小狗和你去考试,这有点过分了吧?
  • 机考全程保证网络稳定;
  • 若机考遇到刷到过的题目,不能照搬网上公开的代码,系统会对代码的相似度进行评估,会被系统判定作弊,建议代码相似度在80%以内;可以通过修改变量名,拆分算法步骤,提取公共方法等手法解决,你懂的~

二、机考重要性

  1. OD招聘过程中,机考和性格测试是由系统判定,第二轮技术面试中会现场写代码的;
  2. OD机考分数越高,有助于申请更高的定级或者薪酬;
  3. 若后续性格测试没通过,机考分数高的话,还可以据此作为申请性格测试重测的依据之一;

三、下面,哪吒将华为OD机试真题归归类,让大家一目而了然。

关于订阅华为OD机试真题的后续问题

  1. 订阅专栏后,专栏内的文章都可看,以后还会继续更新新题
  2. 每道题都包含题目、解题思路、代码详解(关键行包含详细注释)、代码运行截图(保证代码100%正确,通过率100%);
  3. 已经订阅的小伙伴,推荐新人订阅可享 8 折优惠,私信我即可;

在考试的时候,最好不要用CSDN专栏里的源码去答题,因为华为OD机试是有查重的,这个一定要注意!最好是改一改变量名称,加一加注释,改一改逻辑顺序,掌握答题思路才是关键,下面的题中我都加了详细的答题思路,代码中也有详细的注释说明代码运行是100%正确无误的,每一题都有样例测试,全网独一份

如果你刚刚参加完机试考试,欢迎提供真题到哪吒这里,直接红包转账收题。

很多考过的小伙伴,总结了宝贵的经验,多刷题,先易后难,前期积累自信,后期逐一突破,效果最佳。

四、下面分享一道**“2022Q4 100分的路灯照明问题”,提前体验一下华为OD机试的“恐怖如斯”**。

1、题目描述

在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。

每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。

2、输入描述

第一行为一个数N,表示路灯个数,1<=N<=100000。

第二行为N个空格分隔的数,表示路径的照明半径,1<=照明半径<=100000*100。

3、输出描述

第一个路灯和最后一个路灯之间,无法照明的区间的长度和。

4、解题思路

题目要求计算第一个路灯和最后一个路灯之间无法照明的区间的长度和。

例如:

3
20 70 30
路灯1 覆盖0-20
路灯2 覆盖30-170
路灯3 覆盖170-230

没被覆盖的区间只有20~30。

所以输出10。

在这里插入图片描述
但是,如果路灯的照明范围大于100,怎么办?

特别鸣谢:感谢fly晨发现这个问题,并提供更优质的算法。

在这里插入图片描述

在这里插入图片描述

解题思路如下:

  1. 获取输入的灯数量;
  2. 通过Java8 Steam加载n个路灯的照明半径;
  3. 定义allResList,存储每个灯的照明范围;
  4. 定义maxRight,计算第一个灯和最后一个灯的距离;
  5. 将每个灯的照明范围放入一个集合中(左起点,右终点);
  6. 将每个灯的照明范围按照左起点进行升序排序;
    • 先按左边最小距离排序;
    • 如果左边距离相等的情况下 按照右边距离最小的排序;
  7. 当前节点和下一个节点做比较;
    • 用当前节点的右边照明范围和下一个节点的左边照明范围比较;
    • 大于的情况下 需要将下一个节点的右边距离取两个节点的最大值;
    • 说明两个节点之间存在黑暗距离;
  8. 输出黑暗距离之和totalBlack;

5、Java算法源码

public static void main(String[] args) {
    
    
    Scanner sc = new Scanner(System.in);
    int lightNum = sc.nextInt();
    // 获取输入的灯数量
    sc.nextLine();
    // n个路灯的照明半径
    List<Integer> allLightLength = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());

    // 每个灯的照明范围
    List<List<Integer>> allResList = new ArrayList<>();

    // 计算第一个灯和最后一个灯的距离
    int maxRight = (lightNum - 1) * 100;

    // 将每个灯的照明范围放入一个集合中
    for (int i = 0; i < allLightLength.size(); i++) {
    
    
        // 当前灯的照明范围,左起点,右终点
        List<Integer> currentList = new ArrayList<>();
        // 左起点,注意左边范围不要小于总范围的最小长度
        Integer left = Math.max(0, i * 100 - allLightLength.get(i));
        // 右终点,注意右边范围不要大于总范围的最大长度
        Integer right = Math.min(maxRight, i * 100 + allLightLength.get(i));
        currentList.add(left);
        currentList.add(right);
        allResList.add(currentList);
    }

    // 将每个灯的照明范围按照左起点进行升序排序
    allResList = allResList.stream().sorted((list1, list2) -> {
    
    
        Integer oneLeft = list1.get(0);
        Integer twoLeft = list2.get(0);
        // 先按左边最小距离排序
        if (!oneLeft.equals(twoLeft)) {
    
    
            return oneLeft - twoLeft;
        }
        // 如果左边距离相等的情况下  按照右边距离最小的排序
        return list1.get(1) - list2.get(1);
    }).collect(Collectors.toList());

    int totalBlack = 0;
    // 当前节点和下一个节点做比较
    for (int i = 0; i < lightNum - 1; i++) {
    
    
        List<Integer> currentList = allResList.get(i);
        List<Integer> nextList = allResList.get(i + 1);

        // 用当前节点的右边照明范围和下一个节点的左边照明范围比较
        if (currentList.get(1) >= nextList.get(0)) {
    
    
            // 大于的情况下 需要将下一个节点的右边距离取两个节点的最大值
            nextList.set(1, Math.max(currentList.get(1), nextList.get(1)));
            continue;
        }
        // 说明两个节点之间存在黑暗距离
        int currentBlackLength = nextList.get(0) - currentList.get(1);
        totalBlack += currentBlackLength;
    }

    System.out.println(totalBlack);
}

6、效果展示

1、输入

4
20 70 175 10

2、输出

5

3、思路

在这里插入图片描述

在这里插入图片描述

五、还没过瘾?那再分享几道,可以自己跳转刷刷刷~,让你过瘾为止。

1、华为OD机试真题 Java 实现【二维伞的雨滴效应】【2023 B卷 100分】,附详细解题思路

2、华为OD机试真题 Java 实现【宜居星球改造计划】【2023 Q2 200分】,附详细解题思路

3、华为OD机试真题 Java 实现【IPv4地址转换成整数】【2023 B卷 100分】

4、华为OD机试真题 Java 实现【字符统计】【2023 B卷 100分】

5、华为OD机试真题 Java 实现【食堂供餐】【2023 B卷 考生抽中题】,附详细解题思路

6、华为OD机试真题(Java),跳跃游戏 II(100%通过+复盘思路)

7、华为OD机试真题 Java 实现【拼接URL】【2023 B卷 100分】,附详细解题思路

8、华为OD机试真题 Java 实现【找终点】【2023 B卷 100分】,附详细解题思路

9、华为OD机试真题 Java 实现【猴子爬山】【2023 B卷 100分】,附详细解题思路

10、华为OD机试真题 Java 实现【滑动窗口】【2023 B卷 100分】,附详细解题思路

六、Spring Cloud Alibaba核心技术与实战案例

1、内容简介

本书从分布式系统的基础概念讲起,逐步深入分布式系统中间件Spring Cloud Alibaba进阶实战,重点介绍了使用Spring Cloud Alibaba框架整合各种分布式组件的完整过程,让读者不但可以系统地学习分布式中间件的相关知识, 而且还能对业务逻辑的分析思路、实际应用开发有更为深入的理解。

全书共分5大章节:

  • 第1章开篇部分,讲解分布式系统的演进过程和Spring Cloud Alibaba概述及版本的选择,以及单体架构/微服务架构的优缺点;
  • 第2章讲解如何使用Spring Cloud Alibaba实现RPC通讯;
  • 第3章在介绍主流Nacos组件时,介绍了三元的概念以及使用Nacos实现注册中心和配置中心,包含环境的动态切换、配置的动态刷新、通用型配置、版本回滚等核心技术,为微服务环境提供基础的架构;
  • 第4章介绍了负责限流和熔断降级的Sentinel组件,包含收集系统运行状态、流量控制、熔断降级、热点、授权、系统规则、流控的异常处理、熔断的异常处理、规则持久化等;
  • 第5章介绍了网关常用案例,以及在软件项目中常用的高频使用技术点,力求为开发微服务项目的程序员提供一个快速学习的捷径。

本书内容由浅入深、结构清晰、实例丰富、通俗易懂、实用性强,适合需要全方位学习Spring Cloud Alibaba相关技术的人员,也适合培训学校作为培训教材,还可作为大、中专院校相关专业的教学参考书。

2、作者简介

高洪岩,某世界500强公司项目经理,有10年Java开发和项目管理经验,精通Java语言,擅长Java EE、分布式、微服务、高性能服务器架构、
智能报表、多线程和高并发相关的技术内容,理论与实践经验颇丰,也积极参与开源项目的开发与设计,涉及Dubbo、Jedis、Pulsar、ZooKeeper等主流开源项目。
著有《Java多线程编程核心技术》《Java并发编程:核心方法与框架》《NIO与Socket编程技术指南》《Java EE核心框架实战(第2版)》《Java Web实操》《虚拟化高性能NoSQL存储案例精粹:Redis+Docker》等多本图书。

3、书籍链接

https://item.jd.com/14010448.html

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/guorui_java/article/details/131745477