华为OD机试真题——阿里巴巴找黄金宝箱 IV(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

article/2025/7/1 16:03:59

在这里插入图片描述

2025 A卷 200分 题型

本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析;
并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式!

2025华为OD真题目录+全流程解析/备考攻略/经验分享

华为OD机试真题《阿里巴巴找黄金宝箱 IV》:


目录

    • 题目名称:阿里巴巴找黄金宝箱 IV
      • 题目描述
    • Java
      • 题目分析
      • 解决思路
      • Java 代码实现
      • 代码解析
      • 示例测试
        • 示例1:
        • 示例2:
      • 综合分析
    • python
      • 题目分析
      • 解决思路
      • Python 代码实现
      • 代码解析
      • 示例测试
        • 示例1:
        • 示例2:
      • 综合分析
    • JavaScript
      • 题目分析
      • 解决思路
      • JavaScript 代码实现
      • 代码解析
      • 示例测试
        • 示例1:
        • 示例2:
      • 综合分析
    • C++
      • 题目分析
      • 解决思路
      • C++ 代码实现
      • 代码解析
      • 示例测试
        • 示例1:
        • 示例2:
      • 综合分析
    • C语言
      • 题目分析
      • 解决思路
      • C 代码实现
      • 代码解析
        • 1. 栈结构定义
        • 2. 栈操作函数
        • 3. 核心算法
        • 4. 输入处理
      • 示例测试
        • 示例1:
        • 示例2:
      • 综合分析
    • GO
      • 题目分析
      • 解决思路
      • Go 代码实现
      • 代码解析
      • 示例测试
        • 示例1:
        • 示例2:
      • 综合分析


题目名称:阿里巴巴找黄金宝箱 IV


知识点: 字符串、栈操作(单调栈算法)、逻辑处理
时间限制: 1秒
空间限制: 256MB
限定语言: 不限


题目描述

一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地。藏宝地有编号从0-N的箱子排列成环(编号最大的箱子的下一个是编号为0的箱子),每个箱子贴有一个数字。请输出每个箱子之后的第一个比它大的数字,若不存在则输出-1。

输入描述
输入一个数字子串,数字之间用逗号分隔,例如:1,2,3,1

  • 1 ≤ 子串中数字个数 ≤ 10000
  • -100000 ≤ 每个数字值 ≤ 100000

输出描述
结果以逗号分隔,例如:2,3,6,-1,6

测试用例

  1. 输入:1,2,3,4,5 → 输出:2,3,4,5,-1
  2. 输入:2,5,2 → 输出:5,-1,5(需循环搜索)

Java

题目分析

我们需要在给定的环形数组中,为每个元素找到其后第一个更大的元素。环形数组意味着最后一个元素的下一个元素是第一个元素。例如,输入 2,5,2 中,第三个元素的下一个元素是第一个元素,但第一个更大的元素是第二个元素 5。


解决思路

单调栈算法

  1. 遍历两次数组:模拟环形结构,每个元素会被处理两次。
  2. 维护单调递减栈:栈中保存元素索引,确保栈顶元素对应的值是递减的。
  3. 处理每个元素:当当前元素比栈顶元素大时,栈顶元素的下一个更大元素即为当前元素,记录结果并出栈。

Java 代码实现

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String input = scanner.nextLine();String[] parts = input.split(",");int[] nums = new int[parts.length];for (int i = 0; i < parts.length; i++) {nums[i] = Integer.parseInt(parts[i]);}int[] result = nextGreaterElements(nums);System.out.println(arrayToString(result));}private static int[] nextGreaterElements(int[] nums) {int n = nums.length;int[] res = new int[n];Arrays.fill(res, -1);Deque<Integer> stack = new ArrayDeque<>();// 遍历两次数组,模拟环形结构for (int i = 0; i < 2 * n; i++) {int num = nums[i % n];// 维护单调递减栈,处理栈顶元素while (!stack.isEmpty() && num > nums[stack.peek()]) {int index = stack.pop();res[index] = num;}// 只在第一次遍历时压入索引if (i < n) {stack.push(i);}}return res;}private static String arrayToString(int[] arr) {StringBuilder sb = new StringBuilder();for (int i = 0; i < arr.length; i++) {if (i > 0) {sb.append(",");}sb.append(arr[i]);}return sb.toString();}
}

代码解析

  1. 输入处理

    String input = scanner.nextLine();
    String[] parts = input.split(",");
    int[] nums = new int[parts.length];
    for (int i = 0; i < parts.length; i++) {nums[i] = Integer.parseInt(parts[i]);
    }
    
    • 读取输入字符串并分割为整数数组。
  2. 核心算法 nextGreaterElements

    int[] res = new int[n];
    Arrays.fill(res, -1);
    Deque<Integer> stack = new ArrayDeque<>();
    
    • 初始化结果数组 res,默认值为 -1。
    • 使用双端队列 Deque 作为栈,保存索引。
  3. 遍历两次数组

    for (int i = 0; i < 2 * n; i++) {int num = nums[i % n];while (!stack.isEmpty() && num > nums[stack.peek()]) {int index = stack.pop();res[index] = num;}if (i < n) {stack.push(i);}
    }
    
    • 遍历逻辑:遍历 2n 次,i % n 模拟环形访问。
    • 维护栈:栈中保存未找到更大元素的索引,确保栈中元素对应的值是递减的。
    • 处理栈顶元素:当当前元素 num 大于栈顶元素对应的值时,栈顶元素的下一个更大元素即为 num,记录结果并出栈。
    • 压入索引:仅在第一次遍历时压入索引,避免重复处理。
  4. 结果转换

    private static String arrayToString(int[] arr) {// 将数组转换为逗号分隔的字符串
    }
    
    • 将结果数组转换为题目要求的输出格式。

示例测试

示例1:

输入

1,2,3,4,5

输出

2,3,4,5,-1

解析

  • 每个元素的下一个更大元素依次为后一个元素,最后一个元素无更大值。
示例2:

输入

2,5,2

http://www.hkcw.cn/article/xgRVbwWvUZ.shtml

相关文章

AI的出现,是否能替代IT从业者?

引言 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术取得了突破性进展&#xff0c;从机器学习、自然语言处理到计算机视觉&#xff0c;AI正在深刻改变各行各业。在信息技术&#xff08;IT&#xff09;领域&#xff0c;AI技术已被广泛应用于软件开发、系统运维、数…

午休时间发生的一场中国职业足球该如何解困的讨论 寻找黑暗中的光亮

文艺界、商界和体育界关于中国足球的争论再次出现。这些讨论往往开始得莫名其妙,发展过程中各说各话,最终在上了几次微博热搜后被其他话题取代。然而,对于中国足球而言,仍需在孤独与愤懑中寻找光明。当前关于中国足球的讨论已经很多,但真正有价值的见解却很少。这篇文章或…

北京一小区惊现“钞票雨”?民警:非有人故意撒钱!系工人施工碰倒钱箱:网络谣言勿信

5月29日,北京昌平区住总万科天地一带发生了一起引人关注的事件。有市民发帖称,有人在楼上撒钱,金额高达一千万元。视频画面中可以看到空中飘着几张纸币,楼下有市民在接钱。次日,北京七里渠派出所工作人员回应称,当事人是不小心掉的钱,并提醒市民不要听信网络谣言。至于掉…

3分钟回顾马斯克130天政治生涯 理想与现实的碰撞

据美国有线电视新闻最新报道,一名白宫官员证实马斯克将于28日晚开始办理离职程序。这让全球马斯克的粉丝们开始回味他入驻白宫这130天的经历。2025年1月20日,特朗普宣誓就职时,马斯克以政府效率部(DOGE)掌门人的身份踏入权力核心。这个机构被赋予了在18个月内削减2万亿美元…

男子纵身跳进兵马俑坑 推倒两尊兵马俑 现场目击者震惊

5月30日下午6时许,陕西秦始皇兵马俑博物馆发生了一起意外事件。一名男子在兵马俑3号坑纵身跳下,并推倒了两尊兵马俑。据现场目击者小林回忆,当时他跟随导游前往3号坑,刚一进去就看到这名男子跳入俑坑,先是跳到中间一层,随后又跳到俑坑下方。小林表示,自己和周围的游客都…

FastAPI 项目配置管理

安装Dynaconf Dynaconf 是一个强大的 Python 配置管理库&#xff0c;它支持多种文件格式&#xff08;如 JSON、YAML、TOML 和 .env 文件&#xff09;和环境变量来管理应用程序的配置。使用 Dynaconf&#xff0c;您可以轻松地在不同环境&#xff08;例如开发、测试和生产&#…

FPGA管脚类型,及选择

fpga的IO Type选择&#xff0c;如下&#xff1a; 具体的定义&#xff1a;

c++数据结构9——set结构详解

一、set以二叉查找树为基础 二叉查找树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种特殊的二叉树结构&#xff0c;具有以下特点&#xff1a; 左子树所有节点值小于根节点值 右子树所有节点值大于根节点值 左右子树也都是二叉查找树 图例&#xff1a;…

马克龙香会首秀倡“第三条道路” 吁欧亚共寻战略自主

第22届香格里拉对话会于5月30日在新加坡开幕,法国总统马克龙发表了主旨演讲。他呼吁亚洲各国与欧洲建立新联盟,通过开放贸易和对话以及在防务和安全方面加强合作,以打造一个稳定的环境并维护以规则为基础的国际秩序。北京外国语大学区域与全球治理高等研究院教授崔洪建表示,…

胖东来红内裤案当事人鞠躬道歉 名誉侵权案宣判

2025年5月28日,许昌市魏都区人民法院公开审理了原告许昌市胖东来商贸集团有限公司与被告段某的名誉权纠纷案,并当庭宣判。法院判决段某在其个人抖音账号“两个小段(小)”发布宣读书面道歉信的视频,书面道歉信需经法院审核,发布后30日内不得删除;段某赔偿许昌市胖东来商贸…

媒体人:特朗普在准备关税B计划 两步走应对法律挑战

美国总统特朗普提出的“对等关税”政策实施近两个月,但效果并不理想,还面临严峻的法律挑战。美国上诉法院暂时恢复了关税措施后,特朗普贸易团队正在为关税政策制定备用计划,以防止谈判因法律问题中断。《华尔街日报》5月30日援引消息人士的话称,特朗普团队正考虑一项两步走…

巴方为何突袭巴控克什米尔武装分子 挫败袭击基地企图

巴控克什米尔地区警方于5月29日表示,当地安全部队根据情报突袭了该地区一处武装分子藏身点,随后的枪战导致2名警察和4名巴基斯坦塔利班组织成员死亡。此次夜间突袭发生在拉沃拉果德县。当地警方负责人阿卜杜勒贾巴尔表示,被打死的武装分子隶属于巴基斯坦塔利班组织,并声称该…

端午其实是古人的卫生防疫日 解码香囊养生智慧

解码传统习俗健康密码,聚焦端午养生智慧。端午节历史悠久,蕴藏着中国最早的“卫生防疫”基因。这个节日不仅承载着丰富的文化内涵,还与现代公共卫生理念不谋而合。端午节是中国重要的传统节日,被称为“中国最早的卫生防疫日”。古代先民通过特定习俗与仪式,在仲夏时节主动…

上海独居老人3000万豪宅堆满垃圾 生活令人匪夷所思

中海建国里是上海的顶级豪宅,单价达到每平米23万元。一套160平米的房子总价超过3600万元。然而,有一位上海大妈住在价值3700万的豪宅里,却过着令人难以置信的生活。她喜欢捡垃圾,并且将这些垃圾堆在家里。时间久了,家里充满了苍蝇、蚊子、蟑螂,甚至有死老鼠。楼道里的垃圾…

媒体人:美用签证工具破坏教育交流 无理取闹损人不利己

近日,美国国务卿鲁比奥宣布将开始吊销中国学生签证,这一消息引起广泛关注。鲁比奥在社交媒体上表示,要吊销与中国政府有联系或在关键领域学习的中国学生签证。美国国务院网站也发布声明,称新签证政策优先考虑美国利益,并将与国土安全部合作推进吊销事宜,同时加强对中国学…

机器视觉运动控制一体机在背靠背点胶焊锡机上的应用

市场应用背景 点胶与焊锡作为制造业自动化关键环节&#xff0c;专注服务电子、半导体、汽车及医疗等领域的高精密工艺需求。精密高速点胶焊锡解决方案通过实现高精高效的流体控制与焊接操作&#xff0c;助力企业实现生产效率与产品品质的双重提升。 ▲ 待加工的PCB板 ▲ 点胶…

接口自动化测试实战:测试用例也能自动生成

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 作为测试&#xff0c;你可能会对以下场景感到似曾相识&#xff1a;开发改好的 BUG 反复横跳&#xff1b;版本兼容逻辑多&#xff0c;修复一个 BUG 触发了更多 BUG…

IO进程(进程间通信 IPC)

进程间通信方式IPC 1&#xff09;.早期的进程间通信: 无名管道&#xff08;pipe&#xff09;,有名管道&#xff08;fifo&#xff09;&#xff0c;信号(signal) 2&#xff09;.system V IPC: 共享内存&#xff08;share memory&#xff09;,消息队列&#xff08;message que…

端午时节,粽香四溢

端午时节&#xff0c;粽香四溢&#xff0c;那缕缕清香仿佛在召唤着我们共赴这一夏的热情之约。在这充满活力与希望的氛围里&#xff0c;codigger 作为分布式操作系统闪耀登场。它凭借高效协同的工作模式&#xff0c;让各个节点紧密配合、无缝衔接&#xff1b;以灵活拓展的架构&…

贪心算法实战3

文章目录 前言区间问题跳跃游戏跳跃游戏II用最少数量的箭引爆气球无重叠区间划分字母区间合并区间 最大子序和加油站监控二叉树 前言 今天继续带大家进行贪心算法的实战篇3&#xff0c;本章注意来解答一些运用贪心算法的比较难的问题&#xff0c;大家好好体会&#xff0c;怎么…