华为OD机试真题 Java 实现【阿里巴巴找黄金宝箱(III)】【2023 B卷 100分】,附详细解题思路

news2024/11/24 6:49:06

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明
      • 4、那么问题来了,如果有两个满足的怎么办?

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

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

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

一、题目描述

一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的箱子,每个箱子上面贴有一个数字。

阿里巴巴念出一个咒语数字,查看宝箱是否存在两个不同箱子,这两个箱子上贴的数字相同,同时这两个箱子的编号之差的绝对值小于等于咒语数字。

如果存在这样的一对宝箱,请返回最先找到的那对宝箱左边箱子的编号,如果不存在则返回-1。

二、输入描述

第一行输入一个数字字串,数字之间使用逗号分隔,

例如: 1,2,3,1

  • 1 <= 字串中数字个数 <=100000

  • -100000 <= 每个数字值 <= 100000

第二行输入咒语数字,例如: 3

  • 1 <= 咒语数字 <= 100000

三、输出描述

存在这样的一对宝箱,请返回最先找到的那对宝箱左边箱子的编号,如果不存在则返回-1。

四、解题思路

题目关键:

查看宝箱是否存在两个不同箱子,这两个箱子上贴的数字相同,同时这两个箱子的编号之差的绝对值小于等于咒语数字。

  1. 第一行输入若干个箱子,箱子上贴的数字;
  2. 第二行输入咒语;
  3. 定义一个map,key:箱子上贴的数字,value:箱子编号;
  4. 遍历箱子上的数字集合;
  5. 将箱子上的数字和箱子序号加入map中;
  6. 如果两个箱子上贴的数字相同;
    • 如果两个箱子的编号之差的绝对值小于等于咒语数字;
    • 如果满足条件,输出第一次该数字箱子的编号;
    • 如果不满足小于等于咒语数字,更新该数字的箱子的最左位置,再去比较下一个此数字的箱子;
  7. 如果没有符合条件的,如果不存在则返回-1。

五、Java算法源码

package com.guor.od;

import java.util.Scanner;
import java.util.*;
import java.util.HashMap;

public class OdTest01 {
    /**
     * 查看宝箱是否存在两个不同箱子,这两个箱子上贴的数字相同,同时这两个箱子的编号之差的绝对值小于等于咒语数字
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 若干个箱子,箱子上贴的数字
        int[] nums = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
        // 咒语
        int curses = Integer.valueOf(sc.nextLine());
        boolean flag = false;

        /**
         * key:箱子上贴的数字
         * value:箱子编号
         */
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            // 两个箱子上贴的数字相同
            if (map.containsKey(nums[i])) {
                // 两个箱子的编号之差的绝对值小于等于咒语数字
                if (i - map.get(nums[i]) <= curses) {
                    // 如果满足条件,输出第一次该数字箱子的编号
                    System.out.println(map.get(nums[i]));
                    return;
                } else {
                    // 更新该数字的箱子的最左位置,这个地方是关键
                    map.put(nums[i], i);
                }
            } else {
                /**
                 * key:箱子上贴的数字
                 * value:箱子编号
                 */
                map.put(nums[i], i);
            }
        }

        // 如果不存在则返回-1
        System.out.println(-1);
    }
}

六、效果展示

1、输入

1,2,3,4,3,2
2

2、输出

2

3、说明

查看宝箱是否存在两个不同箱子,这两个箱子上贴的数字相同,同时这两个箱子的编号之差的绝对值小于等于咒语数字。
存在这样的一对宝箱,请返回最先找到的那对宝箱左边箱子的编号。

第一行的箱子中有相同编号的有2(编号1和编号5)和3(编号2和编号4)
第二行咒语是2

两个箱子的编号之差的绝对值小于等于咒语数字,只有3号箱子满足,输出最左边箱子的编号2。

4、那么问题来了,如果有两个满足的怎么办?

1,2,3,4,3,2
5

第一行的箱子中有相同编号的有2(编号1和编号5)和3(编号2和编号4)
第二行咒语是5

两个箱子的编号之差的绝对值小于等于咒语数字,2号和3号箱子都满足。

按照题意,最先找到哪个,就算哪个,然后程序终止。

先找到的是3号箱子,输出最左边箱子的编号2即可。

是这样吗?来,打开idea,试一下,就知道了~~

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

类和对象(下篇)

目录 1.再谈构造函数1.1构造函数体赋值1.2初始化列表1.3explicit关键字 2.Static成员2.1概念2.2特性 3.友元3.1友元函数3.2友元类 4.内部类5.再次理解类和对象总结 1.再谈构造函数 1.1构造函数体赋值 如下为对象赋初值构造函数体的语句&#xff0c;不能称作初始化。 class D…

Ubuntu18.04系统安装视频剪辑软件shotcut

Snap Store安装 使用的是最新的Ubuntu 18.04 LTS&#xff08;Bionic Beaver&#xff09;&#xff0c;其本身已安装Snap 如果没有安装&#xff0c;则可以使用以下命令安装SNAP $ sudo apt-get install snapd安装shotcut $ sudo snap install shotcut --classic启动shotcut $…

8.JAVA NIO核心之选择器(Selector)

highlight: arduino-light 选择器(Selector)概述 选择器Selector是 SelectableChannle 对象的多路复用器&#xff0c;Selector 可以同时监控多个SelectableChannel的 IO 状况&#xff0c;也就是说&#xff0c;利用 Selector可使一个单独的线程管理多个 Channel。Selector 是非阻…

shift语句的使用

[rootvm1 scripts]# help shift shift: shift [n]Shift positional parameters.Rename the positional parameters $N1,$N2 ... to $1,$2 ... If N isnot given, it is assumed to be 1.Exit Status:Returns success unless N is negative or greater than $#.说明&#xff1a…

SWMM模型:水文水动力模型在城市内涝、城市排水、海绵城市规划设计中深度应用

查看原文>>>最新水文水动力模型在城市内涝、城市排水、海绵城市规划设计中深度应用 随着计算机的广泛应用和各类模型软件的发展&#xff0c;将排水系统模型作为城市洪灾评价与防治的技术手段已经成为防洪防灾的重要技术途径。本文聚焦于综合利用GIS及CAD等工具高效地进…

Rust vs Go:常用语法对比(十二)

题图来自 Rust vs Go in 2023[1] 221. Remove all non-digits characters Create string t from string s, keeping only digit characters 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 删除所有非数字字符 package mainimport ( "fmt" "regexp")func main() { s : hei…

07 |「注解、反射、多线程、锁」

前言 函数 文章目录 前言一、注解二、反射1、作用 三、多线程1、基本概念2、实现方式1&#xff09;继承 Thread 类2&#xff09;实现Runnable接口3、常用 API 四、锁1、为什么2、锁 一、注解 注解不影响程序逻辑&#xff0c;但会被编译器在不同阶段&#xff08;编译、执行&…

【小白必看】利用Python生成个性化名单Word文档

文章目录 前言所需文件及文件格式说明excel数据如下word 模板如下文件目录格式及生成后的文件 导入所需的模块&#xff1a;打开 Excel 文件&#xff1a;选择工作表&#xff1a;获取数据列表&#xff1a;遍历数据并生成 Word 文档&#xff1a;完整代码结束语 前言 对于需要批量…

【Python机器学习】实验03 logstic回归

文章目录 简单分类模型 - 逻辑回归1.1 准备数据1.2 定义假设函数Sigmoid 函数 1.3 定义代价函数1.4 定义梯度下降算法gradient descent(梯度下降) 1.5 绘制决策边界1.6 计算准确率1.7 试试用Sklearn来解决2.1 准备数据(试试第二个例子)2.2 假设函数与前h相同2.3 代价函数与前相…

找不到vcruntime140_1.dll,无法继续执行此代码如何解决

最近我在使用电脑时遇到了一个问题&#xff0c;即出现了vcruntime140_1.dll文件丢失的错误提示。这让我感到非常困惑和烦恼&#xff0c;因为我无法正常运行一些软件和游戏。 vcruntime140_1.dll是一个Windows系统文件&#xff0c;它是Microsoft Visual C Redistributable的一部…

maven本地仓库地址修改+maven国内镜像设置+maven运行所需pos.xml文件配置基本写法

1&#xff0c;maven本地仓库地址修改 maven在使用过程中&#xff0c;本地项目仓库其空间占用会越来越大&#xff0c;但是其默认仓库位置往往是以C盘为主&#xff0c;C盘作为系统盘常常会遇到所在盘空间占满的情况&#xff0c;所以我们将其改至其他硬盘空间位置为适合做法&#…

Vue style中的 scoped 属性

Vue 中存在 scoped 属性&#xff0c;HTML5中也存在一个 scoped 属性&#xff0c;而且&#xff0c;这两者都是针对 css 样式处理的属性&#xff0c;所以很多文章在 解释 Vue scoped 的时候&#xff0c;都会把两者混为一谈&#xff0c;直接进把 HTML5 scoped 的定义搬到 Vue scop…

TikTok带货成功的关键:用户参与与互动

TikTok作为一个社交媒体平台&#xff0c;其带货成功的关键之一是用户参与和互动。在这篇文章中&#xff0c;我们将探讨如何通过激发用户参与和互动&#xff0c;提高TikTok带货的效果。 首先&#xff0c;创造互动性的内容是吸引用户参与的重要因素。在带货视频中&#xff0c;可…

Redis学习路线(1)—— Redis的安装

一、NoSQL SQL VS NoSQL 1、名称 SQL 主要是指关系数据库。NoSQL 主要是指非关系数据库。 2、存储结构 SQL 是结构化的数据库&#xff0c;以表格的形式存储数据。NoSQL 是非结构化的数据库&#xff0c;以Key-Value&#xff08;Redis&#xff09;&#xff0c;JSON格式文档&…

Linux系统安装Mysql二进制文件

&#x1f4bb;前言 为了简化安装和配置过程&#xff0c;许多Linux发行版提供了预编译的二进制MySQL安装包&#xff0c;这些安装包已经经过测试和验证&#xff0c;可以在大多数Linux系统上正常工作。通过安装这些二进制MySQL安装包&#xff0c;可以省去从源代码编译和安装的繁琐…

mysql通过binlog恢复数据

开启binlog 在my.ini中添加以下两行代码&#xff1a; log-binmysql-bin server-id1 注意要写在[mysqld]范围内才会生效 查看binlog存放日志文件目录 show variables like %datadir%; 查看binlog文件名 show master logs; 将binlog转换成sql mysqlbinlog --no-defaults …

个性化-强连接-更智能 伙伴云5大扩展功能详解

伙伴云【小伙开麦】直播间「“伙”速上新」栏目上线&#xff0c;由产品经理讲解产品伙伴云5大功能模块&#xff0c;旨在让业务流程更加清晰、让用户使用操作更加便捷、让业绩转化更高效、让生态连接更顺畅…… 在不断的技术创新过程中&#xff0c;进一步助力数字化转型&#x…

CAN bus off ——ISO11898

什么是can bus off&#xff1f; CAN总线关闭&#xff08;CAN bus off&#xff09;是指CAN节点进入一种错误状态&#xff0c;无法继续正常的数据通信。当一个CAN节点的错误计数器超过了设定的阈值时&#xff0c;该节点将进入CAN总线关闭状态。在这种状态下&#xff0c;该节点将停…

opencv-24 图像几何变换03-仿射-cv2.warpAffine()

什么是仿射&#xff1f; 仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够 保持图像的平直性和平行性。平直性是指图像经过仿射变换后&#xff0c;直线仍然是直线&#xff1b;平行性是指 图像在完成仿射变换后&#xff0c;平行线仍然是平行线。…

Android 耗时分析(adb shell/Studio CPU Profiler/插桩Trace API)

1.adb logcat 查看冷启动时间和Activity显示时间&#xff1a; 过滤Displayed关键字&#xff0c;可看到Activity的显示时间 那上面display后面的是时间是指包含哪些过程的时间呢&#xff1f; 模拟在Application中沉睡1秒操作&#xff0c;冷启动情况下&#xff1a; 从上可知&…