华为OD机试真题——跳格子3(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

article/2025/7/28 0:52:44

在这里插入图片描述

2025 A卷 200分 题型

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

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

华为OD机试真题《跳格子3》:


目录

    • 题目名称:跳格子3
      • 题目描述
    • Java
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • python
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • JavaScript
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • C++
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • C语言
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • GO
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
        • 示例1输入:
        • 示例2输入:
      • 综合分析


题目名称:跳格子3


属性内容
知识点动态规划、滑动窗口优化
时间限制1秒
空间限制256MB
限定语言不限

题目描述

小明和朋友们玩跳格子游戏,每个格子有特定分数 score = [1, -1, -6, 7, -17, 7]。从起点 score[0] 开始,每次最大跳跃步长为 k,求跳到终点 score[n-1] 时的最大得分。

输入描述

  • 第一行输入整数 n(1 ≤ n ≤ 1e5)。
  • 第二行输入 n 个整数表示 score[i](-1e4 ≤ score[i] ≤ 1e4)。
  • 第三行输入整数 k(1 ≤ k ≤ 1e5)。

输出描述
输出一个整数,表示最大得分。

示例
输入:

6  
1 -1 -6 7 -17 7  
2  

输出:

14  

解释:路径为 0 → 1 → 3 → 5,得分为 1 + (-1) + 7 + 7 = 14


Java

问题分析

我们需要找到从起点跳到终点(每个格子有特定分数)的最大得分,每次跳跃步长不超过k。动态规划结合单调队列优化是关键。


解题思路

  1. 动态规划定义dp[i] 表示跳到第i个格子时的最大得分。
  2. 状态转移dp[i] = max(dp[i-k], dp[i-k+1], ..., dp[i-1]) + score[i]
  3. 单调队列优化:用双端队列维护窗口大小为k的区间,保证队列头部是最大值,时间复杂度优化到O(n)。

代码实现

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] scores = new int[n];for (int i = 0; i < n; i++) {scores[i] = scanner.nextInt();}int k = scanner.nextInt();scanner.close();if (n == 0) {System.out.println(0);return;}long[] dp = new long[n];  // 避免整数溢出dp[0] = scores[0];        // 初始化起点得分Deque<Integer> deque = new ArrayDeque<>();deque.offerLast(0);        // 初始队列存入起点索引for (int i = 1; i < n; i++) {// 移除超出窗口范围的队首元素(窗口左边界为i-k)while (!deque.isEmpty() && deque.peekFirst() < i - k) {deque.pollFirst();}// 当前最大得分 = 窗口内最大值 + 当前格子分数dp[i] = dp[deque.peekFirst()] + scores[i];// 维护队列单调递减:移除队尾所有小于当前值的元素while (!deque.isEmpty() && dp[i] >= dp[deque.peekLast()]) {deque.pollLast();}deque.offerLast(i);  // 将当前索引加入队列}System.out.println(dp[n - 1]);}
}

代码详细解析

  1. 输入处理

    • 读取n、分数数组和k。
    • 处理n=0的边界情况。
  2. 动态规划数组初始化

    • dp[0] 初始化为第一个格子的分数,因为起点必须跳到这里。
  3. 双端队列初始化

    • 队列存储索引,初始时存入0(起点)。
  4. 遍历每个格子

    • 移除窗口外元素:队列头部索引必须≥i-k,否则弹出。
    • 计算当前得分:队列头部对应窗口最大值,加上当前分数。
    • 维护队列单调性:弹出队尾所有小于当前得分的元素,保证队列递减。
    • 加入当前索引:当前索引入队,供后续计算使用。
  5. 输出结果dp[n-1] 是跳到终点的最大得分。


示例测试

示例输入

6  
1 -1 -6 7 -17 7  
2  

输出

14

解析

  • 路径为0→1→3→5,得分1 + (-1) +7 +7 =14。

另一个测试用例

3  
3 1 5  
2  

输出

9

解析

  • 路径为0→1→2,得分3+1+5=9。

综合分析

  1. 时间复杂度:O(n)

    • 每个元素入队出队一次,总操作次数为O(n),适合处理1e5数据。
  2. 空间复杂度:O(n)

    • dp 数组存储每个格子的最大得分,队列最多存储k个元素。
  3. 优势

    • 单调队列优化避免了重复计算窗口最大值。
    • 逻辑清晰,代码简洁,适合处理大规模数据。
  4. 适用场景

    • 需要高效处理滑动窗口最大值的动态规划问题。
    • 适用于实时系统或高频数据处理场景。

python

问题分析

我们需要找到从起点跳到终点的最大得分,每次跳跃步长不超过k。动态规划结合单调队列优化可以高效解决该问题。


解题思路

  1. 动态规划定义dp[i] 表示跳到第i个格子时的最大得分。
  2. 状态转移dp[i] = max(dp[i-k], dp[i-k+1], ..., dp[i-1]) + score[i]
  3. 单调队列优化:使用双端队列维护窗口大小为k的区间,队列头部保持最大值,时间复杂度优化到O(n)。

代码实现

import sys
from collections import dequedef main():# 读取输入数据n = int(sys.stdin.readline())score = list(map(

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

相关文章

UE5蓝图暴露变量,类似Unity中public一个变量,在游戏运行时修改变量实时变化和看向目标跟随目标Find Look at Rotation

UE5蓝图中暴露变量&#xff0c;类似Unity中public一个变量&#xff0c;在游戏运行时修改变量实时变化 1&#xff0c;添加变量 2&#xff0c;设置变量的值 3&#xff0c;点开小眼睛&#xff0c;此变量显示在编辑器中&#xff0c;可以运行时修改 看向目标跟随目标Find Look at R…

第 1 章:学习起步

1. React Native前置知识要求 在开始学习React Native之前&#xff0c;有一些前置知识你需要了解。不过别担心&#xff0c;我会带你逐步掌握这些内容&#xff0c;让你顺利入门。 1.1. JavaScript是必须掌握的 学习React Native&#xff0c;JavaScript是基础。你需要了解Java…

BERT***

​​1.预训练&#xff08;Pre-training&#xff09;​​ 是深度学习中的一种训练策略&#xff0c;指在大规模无标注数据上预先训练模型&#xff0c;使其学习通用的特征表示&#xff0c;再通过​​微调&#xff08;Fine-tuning&#xff09;​​ 适配到具体任务 2.sentence-lev…

在Mathematica中使用WhenEvent求解微分方程

WhenEvent[event,action]指定当事件event触发时&#xff0c;方程在 NDSolve 及相关函数中执行的操作action。 模拟一个每次弹起后保持95%速度的弹跳球 NDSolve[{y[t] -9.81, y[0] 5, y[0] 0, WhenEvent[y[t] 0, y[t] -> -0.95 y[t]]}, y, {t, 0, 10}]; Plot[y[t] /. %…

Nature:多模态大模型LLMs如何驱动多组学与生命科学研究新范式?

高通量组学技术的快速进步引发了生物数据的爆炸式增长&#xff0c;远超当前对分子层面规律的解析能力。在自然语言处理领域&#xff0c;大语言模型&#xff08;LLMs&#xff09;通过整合海量数据构建统一模型&#xff0c;已显现突破数据困境的潜力。 Nature的这篇文章中&#x…

ubuntu20.04安装教程(图文详解)

Ubuntu 24.04 LTS&#xff0c;代号 Noble Numbat&#xff0c;于 2024 年 4 月 25 日发布&#xff0c;现在可以从 Ubuntu 官方网站及其镜像下载。此版本将在 2029 年 4 月之前接收为期五年的官方安全和维护更新。 关于 Ubuntu 24.04 LTS 的一些关键点&#xff1a; 发布日期&am…

Linux中Shell脚本的常用命令

一、设置主机名称 1、通过修改系统文件来修改主机名称 [rootsakura1 桌面]# vim /etc/hostname sakura /etc/hostname&#xff1a;Linux 系统中存储主机名的配置文件。修改完文件后&#xff0c;在当前的shell中是不生效的&#xff0c;需要关闭当前shell后重新开启才能看到效…

Redisson学习专栏(二):核心功能深入学习(分布式锁,分布式集合,原子操作与计数器,事件与监听)

本文是“Redisson学习专栏”第二篇&#xff0c;聚焦其核心分布式功能实现原理与最佳实践 文章目录 前言&#xff1a;分布式系统核心能力实践一、分布式锁&#xff1a;高并发下的守卫者1.1 可重入锁 (Reentrant Lock)1.2 公平锁 (Fair Lock)1.3 联锁 (MultiLock)1.4 红锁 (RedLo…

学习路之PHP--easyswoole_panel安装使用

学习路之PHP--easyswoole_panel安装使用 一、新建文件夹二、安装三、改配置地址四、访问 IP:Port 自动进入index.html页面 一、新建文件夹 /www/wwwroot/easyswoole_panel 及配置ftp 解压easyswoole_panel源码 https://github.com/easyswoole-panel/easyswoole_panel 二、安…

基于分布式状态机的集装箱智能道口软件架构方法

集装箱码头对进出场道口的通过能力始终是要求最高的&#xff0c;衡量道口的直接指标为道口通行效率&#xff0c;道口通行效率直接体现了集装箱码头的作业效率以及对外服务水平&#xff0c;进而直接影响到码头的综合能力。所以&#xff0c;码头普遍使用智能道口实现24小时无人值…

2014药柜设计问题

1 题目描述 D题 储药柜的设计 储药柜的结构类似于书橱&#xff0c;通常由若干个横向隔板和竖向隔板将储药柜分割成若干个储药槽(如图1所示)。为保证药品分拣的准确率&#xff0c;防止发药错误&#xff0c;一个储药槽内只能摆放同一种药品。药品在储药槽中的排列方式如图2所示。…

c# 获取电脑 分辨率 及 DPI 设置

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices;/// <summary> /// 这个可以 /// </summary> class Program {static void Main(){//设置DPI感知try{SetProcessDpiAwareness(…

2025年渗透测试面试题总结-匿名[校招]红队攻防工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 匿名[校招]红队攻防工程师 1. 00截断的原理 2. Java回显通用思路及JDK差异 3. Redis利用姿势及环境差异 …

高级数据结构与算法期末考试速成记录

高级数据结构与算法期末考试速成记录 0.分治中的一些知识点 Master公式&#xff08;又称主定理&#xff0c;Master Theorem&#xff09;是一种用于快速求解分治递归算法时间复杂度 的数学工具&#xff0c;适用于递归式形如以下形式的算法&#xff1a; T ( n ) a T ( n b ) …

Telerik生态整合:Kendo UI for Angular组件在WinForms应用中的深度嵌入(一)

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库&#xff0c;加快开发速度。Telerik DevCraft提供完整的工具箱&#xff0c;用于构建现代和面向未来的业务应用程序&#xff0c;目前提供UI for ASP.NET MVC、Kendo…

深入浅出程序设计竞赛(洛谷基础篇) 第十四章 搜索

文章目录 前言例14-1 四阶数独前置知识&#xff1a; 例14-2八皇后例14-3 kkksc03考前临时抱佛脚例14-4 马的遍历前置知识 例14-5 奇怪的电梯例14-6 Meteor Shower S习题14-1.1 选数例14-1 四阶数独前置知识&#xff1a; 例14-2八皇后例14-3 kkksc03考前临时抱佛脚例14-4 马的遍…

图书管理系统的设计与实现

湖南软件职业技术大学 本科毕业设计(论文) 设计(论文)题目 图书管理系统的设计与实现 学生姓名 学生学号 所在学院 专业班级 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕业设计(论文)作品是本人在指导教师的指导下,独…

【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤

在Java开发的世界里&#xff0c;选择一个强大的集成开发环境&#xff08;IDE&#xff09;是迈向高效编程的第一步。而IntelliJ IDEA无疑是Java开发者中最受欢迎的选择之一。它以其强大的功能、智能的代码辅助和简洁的用户界面&#xff0c;帮助无数开发者快速构建和部署Java项目…

医疗IT系统绝缘监测及故障定位,绝缘监测技术在医院关键区域的应用

医院作为重要的公共设施&#xff0c;其供配电系统的可靠性和安全性直接关系到患者的生命安全。为确保医院电力系统的稳定&#xff0c;GB/T 16895.24《建筑物电气装置》对医疗场所按用电的安全等级进行了细致的分类&#xff0c;并针对不同的类别推荐相应的电力系统配置。其中&am…

进程间通信及管道(理论)

目录 进程间通信介绍 进程间通信目的 进程间通信发展 进程间通信分类 管道 什么是管道 匿名管道 实例代码 用fork来共享管道原理 管道读写规则 管道特点 命名管道 创建一个命名管道 匿名管道与命名管道的区别 命名管道的打开规则 进程间通信介绍 进程间通信目的 数据传输&#…