华为OD机试真题——攀登者2(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

article/2025/7/1 0:50:43

在这里插入图片描述

2025 A卷 200分 题型

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

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

华为OD机试真题《攀登者2》:


目录

    • 题目名称:攀登者2
      • 题目描述
    • Java
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 测试示例
      • 综合分析
    • python
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • JavaScript
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • C++
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • C语言
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • GO
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析


题目名称:攀登者2


知识点:动态规划、贪心算法
时间限制:1秒
空间限制:256MB
限定语言:不限


题目描述

攀登者喜欢寻找各种地图并尝试攀登到最高的山峰。地图表示为一维数组,数组的索引代表水平位置,数组元素代表海拔高度(0为地面)。一个山脉可能包含多个山峰(高度大于相邻位置或位于边界且高于相邻位置)。登山时体力消耗规则如下:

  • 上山:相邻高度差的两倍体力
  • 下山:相邻高度差的一倍体力
  • 平地:不消耗体力

攀登者需评估在给定体力下能安全返回地面的可攀登山峰数量(体力耗尽时有生命危险)。

输入描述

  • 第一行为地图数组(如 0,1,4,3,1,0
  • 第二行为攀登者体力值

输出描述

  • 可安全攀登山峰的数量

示例
输入:

0,1,4,3,1,0,0,1,2,3,1,2,1,0  
13  

输出:

3  

说明:可攀登至索引3、10、12的山峰,且总体力消耗均小于13。


Java

问题分析

我们需要找到地图数组中的所有山峰,并计算攀登到这些山峰并安全返回所需的最小体力消耗。若总消耗不超过给定体力值,则该山峰可被攀登。最终统计可安全攀登山峰的数量。


解题思路

  1. 识别山峰:遍历数组,找到所有符合山峰条件的位置(高度大于相邻位置或位于边界且高于相邻位置)。
  2. 预处理最近地面:对于每个位置,找到其左边和右边最近的地面(值为0的位置)。
  3. 计算体力消耗:对每个山峰,计算从左边或右边地面出发并返回的最小体力消耗。
  4. 统计有效山峰:比较每个山峰的体力消耗与给定体力值,统计可安全攀登的山峰数量。

代码实现

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int[] map = Arrays.stream(scanner.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();int energy = Integer.parseInt(scanner.nextLine());List<Integer> peaks = new ArrayList<>();// 1. 找出所有山峰for (int i = 0; i < map.length; i++) {boolean isPeak = false;if (i == 0) {isPeak = map[i] > map[i + 1];} else if (i == map.length - 1) {isPeak = map[i] > map[i - 1];} else {isPeak = map[i] > map[i - 1] && map[i] > map[i + 1];}if (isPeak) {peaks.add(i);}}// 2. 预处理每个位置的左右最近地面int[] leftGround = new int[map.length];int[] rightGround = new int[map.length];int lastZero = -1;for (int i = 0; i < map.length; i++) {if (map[i] == 0) {lastZero = i;}leftGround[i] = lastZero;}lastZero = -1;for (int i = map.length - 1; i >= 0; i--) {if (map[i] == 0) {lastZero = i;}rightGround[i] = lastZero;}int count = 0;// 3. 计算每个山峰的最小体力消耗for (int peak : peaks) {int left = leftGround[peak];int right = rightGround[peak];if (left == -1 && right == -1) continue;int minEnergy = Integer.MAX_VALUE;if (left != -1) {int go = calculateEnergy(left, peak, map);int back = calculateEnergy(peak, left, map);minEnergy = Math.min(minEnergy, go + back);}if (right != -1) {int go = calculateEnergy(right, peak, map);int back = calculateEnergy(peak, right, map);minEnergy = Math.min(minEnergy, go + back);}if (minEnergy <= energy) {count++;}}System.out.println(count);}// 计算从start到end的体力消耗private static int calculateEnergy(int start, int end, int[] map) {int energy = 0;if (start < end) {for (int i = start; i < end; i++) {int diff = map[i + 1] - map[i];if (diff > 0) {energy += 2 * diff;} else if (diff < 0) {energy += -diff;}}} else {for (int i = start; i > end; i--) {int diff = map[i - 1] - map[i];if (diff > 0) {energy += 2 * diff;} else if (diff < 0) {energy += -diff;}}}return energy;}
}

代码详细解析

  1. 读取输入:将输入的地图数组和体力值转换为Java数组和整数。
  2. 识别山峰:遍历数组,根据位置判断是否为山峰(边界或高于相邻位置)。
  3. 预处理最近地面
    • leftGround[i]:记录位置i左边最近的地面(值为0的位置)。
    • rightGround[i]:记录位置i右边最近的地面。
  4. 计算体力消耗
    • 对每个山峰,计算从左地面到山峰再返回的体力消耗和从右地面到山峰再返回的体力消耗。
    • 使用calculateEnergy方法计算路径的体力消耗,考虑上山(2倍高度差)和下山(1倍高度差)。
  5. 统计有效山峰:比较每个山峰的最小体力消耗与给定体力值,统计符合条件的数量。

测试示例

示例输入

0,1,4,3,1,0,0,1,2,3,1,2,1,0  
13  

输出

3

解析:山峰索引为2、9、11。计算各自的体力消耗均小于13,故输出3。


综合分析

  1. 时间复杂度
    • 识别山峰:O(n)
    • 预处理地面:O(n)
    • 计算体力:最坏O(n^2)(每个山峰遍历整个数组),但实际中路径长度较短。
  2. 空间复杂度:O(n)存储地图和预处理数组。
  3. 优势:通过预处理地面位置,减少重复计算;体力计算明确区分上山和下山,确保准确性。
  4. 适用性:适用于路径长度较短或山峰数量较少的情况,处理大规模数据时可能需优化。

python

问题分析

我们需要找到地图数组中的所有山峰,并计算攀登到这些山峰并安全返回所需的最小体力消耗。若总消耗不超过给定体力值,则该山峰可被攀登。最终统计符合条件的山峰数量。


解题思路

  1. 识别山峰:遍历数组,找到符合条件的位置(高度大于相邻位置或位于边界且高于相邻位置)。
  2. 预处理最近地面:对于每个位置,预处理其左边和右边最近的地面(值为0的位置)。
  3. 计算体力消耗:对每个山峰,计算从左边或右边地面出发并返回的最小体力消耗。
  4. 统计有效山峰:比较每个山峰的体力消耗与给定体力值,统计符合条件的数量。

代码实现

def main

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

相关文章

王楚钦回应巴黎奥运兼三项 球拍保卫战背后的坚韧

球拍两次被毁,王楚钦经历了“武器”保卫战。在巴黎奥运会混双领奖台上,他刚放下染金的球拍,蜂拥而至的记者便踩碎了这柄陪他征战的“武器”。24小时后,他握着陌生的备用拍站上男单赛场,爆冷止步32强。一年后面对央视镜头时,他仍带着不甘。当2025年多哈世乒赛混双开赛前,…

女子走路腿就痛发现藏体内16年竹签 异物“蛰伏”引发警觉

长沙25岁的李女士右小腿常感麻木,走路时间一长还会疼痛。她来到长沙市第三医院骨科检查,医生发现导致不适的原因是一根16年前扎入肉里的竹签。在医院骨科咨询时,接诊医生发现李女士的右小腿中下段外侧有一个硬结,X光片显示右腓骨中段外侧软组织内有多发条片状稍高密度影,提…

吴彦祖疯狂接代言被猜缺钱 男神滤镜渐模糊

最近,吴彦祖频繁出现在公众视野中,不仅代言汽车和英语课程,还为一款气泡黄酒做宣传。不少网友质疑他是否经济状况不佳。吴彦祖专门为这款黄酒拍摄了视频,通过短剧情节展示了其解辣功能。对于大多数人来说,黄酒通常用于烹饪,但这款气泡黄酒成功打入年轻人市场,销量大增。…

单依纯回应被称“小王菲” 模仿与争议并存

这季的《歌手2025》加入了许多年轻的新面孔,节目显得更加生动活泼。然而,一些年轻歌手因为恶搞老前辈而引起了争议。单依纯选择了王菲的经典曲目《天空》,并展示了她的高音技巧,保持了一贯的稳健表现。她的实力得到了大家的认可,连续夺冠也没有招来太多质疑。许多网友认为…

广东赛龙舟已经传到高中生这辈了 千年文化薪火相传

五月初五的珠江水面,数百条龙舟如离弦之箭劈波斩浪。鼓声震天,浪花飞溅,十万观众沿岸呐喊——这是广东龙舟竞渡的寻常景象。在这个被现代摩天大楼环绕的岭南水乡,一场延续两千年的水上史诗正以最炽热的方式年复一年上演。广东龙舟超越了简单的体育竞技,成为融血脉信仰、地…

CMG 机器人格斗大赛举行,宇树人形机器人参赛,比赛有哪些看点?对行业意味着什么?

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 其实那个遥控员挺爽的。打拳皇等都是用手柄控制虚拟人物在对打&#xff0c;他们这是控制真的。 格斗最考验的不是攻击力&#xff0c;而是"挨打后能不能快速爬起来"。G1在比赛中展示…

网飞回应刘若英新剧被指抄袭 原创精神遭质疑

刘若英自编自导的新剧《忘了我记得》被指抄袭美剧《了不起的麦瑟尔夫人》。有观众指出,两部剧的情节完全一致,不仅结构相似,连人物设定也存在重叠。此外,《忘了我记得》中的喜剧段子被认为没有笑点,第三集还被指控直接复制了“女主在舞台上吐槽丈夫被其撞见,导致丈夫愤而…

男子花20万娶妻 女方亲戚是演员 新娘消失引争议

5月31日,“男子花20万娶妻女方亲戚是演员”成为热门话题。据报道,河南新乡的程先生为了让30岁的儿子早日成家,通过当地一家婚介所认识了一位河北姑娘。相亲三天后,双方觉得合适便领了证。程先生给女方支付了16万元彩礼,加上其他费用总共花费20万元。然而,生活几天后,女方…

多地网友目击夜空不明飞行物 实为苏联旧卫星

5月30日晚,山东潍坊、日照等地的许多网友在社交媒体上发布视频,称夜空中有不明飞行物飞过。江苏、安徽等地的网友也发布了类似视频,并有人猜测是火流星。天体物理学博主解释说,这是一颗国外发射的侦查卫星。次日早上,网友王女士表示,30日晚8点45分左右,她和妹妹在潍坊昌…

胖东来红内裤案涉事博主公开道歉 未核实事实致歉

5月30日晚,自称因穿胖东来红内裤过敏的博主段某公开道歉,表示自己没有把握好言语分寸,对法律缺乏足够的了解和敬畏。此前,许昌市魏都区人民法院审理了胖东来公司与段某之间的名誉权纠纷案,判决段某赔偿胖东来各项经济损失共计40万元。段某在其个人账号发布视频称,自认为是…

胖东来红内裤事件博主公开道歉 名誉侵权赔偿40万

5月30日晚,自称穿着胖东来红内裤过敏的博主段某公开道歉,表示自己没有把握好言语的分寸,对法律没有足够的了解和敬畏。许昌市魏都区人民法院此前审理了胖东来公司与段某之间的名誉权纠纷案,判决段某赔偿胖东来各项经济损失共计40万元。事件发酵后,胖东来曾对多名涉事员工作…

山东多地夜空现不明飞行物 卫星再入大气层所致

5月30日晚,山东潍坊、日照以及江苏、安徽等地的网友在社交媒体上发布视频,称夜空中出现不明飞行物。这一现象迅速引发热议,部分网友猜测其为火流星,相关话题成为网络焦点。5月31日早上,目击者王女士表示,30日晚8点45分左右,她与妹妹在潍坊市昌邑县亲眼目睹不明飞行物飞过…

通义灵码:基于MCP的火车票小助手系统全流程设计与技术总结

一、项目背景与需求分析 目标&#xff1a;基于12306 MCP接口&#xff0c;开发一款解决高峰出行&#xff08;春运/节假日&#xff09;痛点的轻量级工具&#xff0c;提供快速查询、智能推荐、抢票辅助等功能。 核心用户痛点 场景痛点春运抢票手动刷新效率低&#xff0c;错过放…

Qt Dial(旋钮)

使⽤ QDial 表⽰⼀个 旋钮. 有些程序, 通过⿏标拖动旋钮旋转, 即可完成⼀些相关的设置. 核⼼属性 属性说明value持有的数值.minimum最⼩值maximum最⼤值singleStep按下⽅向键的时候改变的步⻓.pageStep按下 pageUp / pageDown 的时候改变的步⻓.sliderPosition界⾯上旋钮显⽰…

断眉称建湖南台大楼在美国得花50年 或成《歌手》最大悬念

5月27日,美国流行歌手Charlie Puth在社交媒体上发布了一条机场动态,其账号IP属地显示为湖南,迅速引发网友关注。芒果台超话曝光的同款登机照线索让网友推测他可能与本周五《歌手》直播竞演有关,成为节目本季的一大悬念。不少网友认为,即便Charlie Puth参加节目,也难以撼动…

《亚洲新声》中国4-1日本 张靓颖力挺中国歌手

张靓颖在《亚洲新声》第二期节目中,情绪十分明显。这一期中国新声歌手与日本新声歌手对决,最终结果是中国选手五战四胜。日本选手阵容强大,包括“一代歌姬”中林芽依和高人气动漫《妖精的尾巴》原唱迷悠奈。迷悠奈在最后的歌王挑战环节演唱了《你的名字》片尾曲,甚至让工藤…

梁伟铿王昶无缘新加坡公开赛4强 连救6赛点惜败

在2025新加坡羽毛球公开赛的男双1/4决赛中,梁伟铿和王昶对阵金元浩与徐承宰。经过激烈的比拼,梁伟铿和王昶以20-22、22-24的成绩惜败,未能晋级四强。尤其在末局比赛中,梁伟铿和王昶展现了顽强的精神,连续挽救了六个赛点,但最终还是未能逆转局势。尽管如此,他们的表现赢得…

重伤昏迷女孩紧急转院 三地接力护送 爱心照亮生命之路

王先生和妻子在医院急诊楼前向一路护送的交警深深鞠了一躬,两人抬头时已是满脸泪水。回想起几个小时前的求助,王先生仍有些难以置信:“没想到真的这么顺利。”5月29日,福建省公安厅交通管理总队指挥中心和宣传处密切配合,协调南平、福州两市高地交警,顺利完成一起跨地市重…

马龙祝大家假期吃好玩好 端午安康享假期

直播吧5月31日讯 今天,马龙在社媒向大家送上了端午节的问候。马龙晒出了一张粽子照片并配文写道:“端午安康,祝大家假期吃好玩好!”责任编辑:zhangxiaohua

河南老板又发钱了 允许员工带薪收麦 暖心福利引热议

5月23日,河南长垣的河南省矿山起重机有限公司内举行了一场特别的“三夏”生产动员暨表彰大会。公司董事长崔培军在会上宣布了一项暖心措施:他现场拿出360万元现金,为每位员工发放了700元现金、一袋小米和4箱啤酒作为福利。崔培军表示,当前正值“三夏”大忙季节,许多员工家…