华为OD机考算法题:找终点
目录
题目部分
解读与分析
代码实现
题目部分
| 题目 | 找终点 |
| 难度 | 易 |
| 题目说明 | 给定一个正整数数组,设为nums,最大为100个成员,求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。 要求: 1.第一步必须从第一元素开始,且 1 <= 第一步的步长 < len/2; (说明:len为数组的长度,需要自行解析。) 2.从第二步开始,只能以所在成员的数字走相应的步数,不能多也不能少,如果目标不可达返回-1,只输出最少的步骤数量。 3.只能向数组的尾部走,不能往回走。 |
| 输入描述 | 由正整数组成的数组,以空格分隔,数组长度小于100,请自行解析数据数量。 |
| 输出描述 | 正整数,表示最少的步数,如果不存在输出-1。 |
| 补充说明 | 补充说明 |
| ------------------------------------------------------ | |
| 示例 | |
| 示例1 | |
| 输入 | 7 5 9 4 2 6 8 3 5 4 3 9 |
| 输出 | 2 |
| 说明 | 第一步:第一个选择步长 2,从第一个成员开始走 2 步,到达 9; 第二步:从 9 开始,经过自身数字 9 对应的 9 个成员到最后。 |
| 示例2 | |
| 输入 | 1 2 3 7 1 5 9 3 2 1 |
| 输出 | -1 |
| 说明 | 无 |
解读与分析
题目解读:
整形数组的长度为 len,第一步的大小可以是 [1, len/2) 中的任意一个数字,第二步和第二步以后的步数只能为当前成员的数字。
分析与思路:
题目中,第一步是可选的数字,一旦第一步数字固定了,后面的所有步数都是固定的。所以,此题可变的是第一步的步数,我们可以尝试第一步所有的可能的步数,计算所有能到达最后的步数,输出这些步数中的最小值即可。如果第一步尝试了所有可能的步数,全都无法达到最后一步,则输出 -1。
以上方法的时间复杂度为O()。
代码实现
Java代码
import java.util.Scanner;/*** 篮球比赛* @since 2023.10.08* @version 0.1* @author Frank**/
public class FindEnd {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String input = sc.nextLine();String[] numbersStr = input.split( " " );processFindEnd( numbersStr );}}private static void processFindEnd( String numbersStr[] ){int count = numbersStr.length;int[] numbers = new int[count];for( int i = 0; i < count; i ++ ){numbers[i] = Integer.parseInt( numbersStr[i] );}int minSteps = Integer.MAX_VALUE;for( int i = 1; i < count * 1.0 / 2; i ++ ){int steps = 1;int next = i;while( next < count -1 ){steps ++;next = next + numbers[next];if( next == count -1 ){if( steps < minSteps ){minSteps = steps;} break;}}}if( minSteps == Integer.MAX_VALUE ){minSteps = -1;}System.out.println( minSteps );}}
JavaScript代码
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {while (line = await readline()) {var numberArr = line.split(" ");processFindEnd(numberArr);}
}();function processFindEnd(numbersStr) {var count = numbersStr.length;var numbers = new Array();for (var i = 0; i < count; i++) {numbers[i] = parseInt(numbersStr[i]);}var minSteps = Number.MAX_VALUE;for (var i = 1; i < count / 2; i++) {var steps = 1;var next = i;while (next < count - 1) {steps++;next = next + numbers[next];if (next == count - 1) {if (steps < minSteps) {minSteps = steps;}break;}}}if (minSteps == Number.MAX_VALUE) {minSteps = -1;}console.log(minSteps);
}
(完)
相关文章:
华为OD机考算法题:找终点
目录 题目部分 解读与分析 代码实现 题目部分 题目找终点难度易题目说明给定一个正整数数组,设为nums,最大为100个成员,求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。 要求: 1.第…...
el-table通过scope.row获取表格每列的值,以及scope.$index
<el-table-column type"selection" width"55"></el-table-column><el-table-column prop"id" label"ID" width"80"></el-table-column><el-table-column prop"name" label"文件名…...
uni-app:本地缓存的使用
uni-app 提供了多种方法用于本地缓存的操作。下面是一些常用的 uni-app 本地缓存方法: uni.setStorageSync(key, data): 同步方式将数据存储到本地缓存中,可以使用对应的 key 来获取该数据。 uni.setStorage({key, data}): 异步方式将数据存储到本地缓存…...
在Scrum敏捷开发中,开发人员(Developers)的职责
在Scrum敏捷开发中,开发人员(Developers)是Scrum团队中最重要的角色之一,负责产品的开发和交付,其重要性不言而喻。 那开发人员的职责和需要参加的活动是什么呢? Developers核心职责: 承诺并完…...
SOLIDWORKS® 2024 新功能 - 3D CAD
1、 先前版本的兼容性 • 利用您订阅的 SOLIDWORKS,可将您的 SOLIDWORKS 设计作品保存为旧版本,与使用旧版本 SOLIDWORKS 的供应商无缝协作。 • 可将零件、装配体和工程图保存为新版本前两年之内的SOLIDWORKS 版本。 优点: 即使其他用户正…...
系统架构设计:20 论软件需求管理
目录 一 需求工程 1 需求开发 1.1 需求获取 1.1.1 软件需求的分类 1.1.2 需求获取方法...
K8S云计算系列-(2)
1.Kubernetes平台配置实战 部署Kubernetes云计算平台,至少准备两台服务器,服务器CPU至少2C,内存4G,环境如下所示: Kubernetes Master节点:192.168.1.146 Kubernetes Minion节点:192.168.1.147…...
通讯录(C语言版)
用c语言实现一个通讯录 功能:.添加、删除、查找、更改、显示、排序联系人 内存存储方式:结构体数组 1.打印菜单,各个功能分别用函数实现,将函数声明放在头文件中。 2.定义联系人信息,将联系人信息与countÿ…...
natapp内网穿透-将本地运行的程序/服务器通过公网IP供其它人访问
文章目录 1.几个基本概念1.1 局域网1.2 内网1.3 内网穿透1.4 Natapp 2.搭建内网穿透环境3.本地服务测试 1.几个基本概念 1.1 局域网 LAN(Local Area Network,局域网)是一个可连接住宅,学校,实验室,大学校…...
数据结构八大排序Java源码
文章目录 [1]. 堆排序[2]. 冒泡排序[3]. 选择排序[4]. (直接)插入排序[5]. 希尔排序(属于插入算法)[6]. 快速排序[7]. 归并排序[8]. 基数排序 王道数据结构排序讲解 排序算法最佳时间复杂度最坏时间复杂度平均时间复杂度空间复杂度…...
区块链加密虚拟货币交易平台安全解决方案
区块链机密货币交易锁遭入侵,安全存在隐患。使用泰雷兹Protect server HSM加密机,多方位保护您的数据,并通过集中化管理,安全的存储密钥。 引文部分: 损失7000万美元!黑客入侵香港区块链加密货币交易所 2023年9月&…...
【SoC FPGA】HPS启动过程
SoC HPS启动流程 Boot ROMPreloaderBoot Loader HPS的启动是一个多阶段的过程,每一个阶段都会完成对应的工作并且将下一个阶段的执行代码引导起来。每个阶段均负责加载下一个阶段。第一个软件阶段是引导 ROM,引导 ROM 代码查找并且执行称为预加载器的第 …...
Wireshark CLI | Mergecap 篇
简介 Mergecap 是 Wireshark 程序安装时附带的可选工具之一,用于合并数据包文件的命令行工具。 mergecap [ -a ] [ -F <file format> ] [ -I <IDB merge mode> ] [ -s <snaplen> ] [ -V ] -w <outfile>|- <infile> [<infile>…...
10个打工人必备AI神器,升职加薪靠AI
HI,同学们,我是赤辰,本期是第18篇AI工具类教程,文章底部准备了粉丝福利,看完后可领取!1. Runway(文字转视频AI工具) 只需要一句提示词就能精确生成你所想象的视频场景,还…...
Java架构师缓存架构设计
目录 1 导学2 高性能概述2.1 高性能的定义和衡量指标2.2 如何实现高性能的计算机系统或软件程序2.3 木桶理论2.4 如何实现计算机系统或软件程序的高性能3 多级缓存设计3.1 浏览器缓存3.2 CDN缓存3.3 负载均衡的缓存3.4 进程内缓存3.5 分布式缓存4 缓存技术方案5 如何进行缓存拆…...
Linux 安全 - DAC机制
文章目录 一、安全简介二、DAC2.1 UNIX 的自主访问控制2.2 Linux 的自主访问控制 三、进程凭证3.1 简介3.2 uid/gid3.3 系统调用 四、客体标记4.1 简介4.2 系统调用 五、UGO规则源码分析参考资料 一、安全简介 计算机系统应对安全挑战的办法大致有四种:隔离、控制、…...
解决Windows系统win+shift+s截图快捷键失效问题
文章目录 打开任务管理器找到Windows资源管理器,选择重新启动 打开任务管理器 按“Win R”打开: 输入taskmgr.exe,运行,即可打开任务管理器: 找到Windows资源管理器,选择重新启动 点击右下角的“重新启…...
Excel 快速填充
文章目录 利用快速填充进行提取数据利用快速填充进行拆分重组 2013 及以上版本才有的功能. 利用快速填充进行提取数据 有一列的数据已有, 需要提取部分数据到另一列, 只需要输入部分内容, 后面内容可以自动显示, 按下回车即可快速填充. 只要前面手动输入的内容没有错得太离谱…...
OPENCV图像和视频处理
图像基本操作: Opencv图像处理(全)_胖墩会武术的博客-CSDN博客 import cv2 import matplotlib.pyplot as plt import numpy as npimgcv2.imread(1.jpg) #图像的显示 cv2.imshow(image,img) cv2.waitKey(0) …...
QDir实践
现在有多个文件,路径为: a\xxx\kmd_config\c.json 其中xxx是变量 startcalc,,,,,, 目标: 访问每一个json文件 实例: QString app_path QApplication::applicationDirPath() "/app";QDir dir(app_path);QStringLi…...
KNN和K-Means选错距离度量?详解闵可夫斯基距离中参数p的实战调优
KNN与K-Means距离度量实战:如何用闵可夫斯基距离参数p提升模型性能 当你在scikit-learn中第一次使用KNN分类器时,可能会注意到一个不起眼的参数p——它默认为2,代表使用欧氏距离。但鲜有人告诉你,这个参数的选择可能让你的模型准确…...
MAA明日方舟助手:5步配置实现游戏日常全自动化
MAA明日方舟助手:5步配置实现游戏日常全自动化 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcode.co…...
Vaadin Framework:现代Java Web应用开发的终极解决方案
Vaadin Framework:现代Java Web应用开发的终极解决方案 【免费下载链接】framework Vaadin 6, 7, 8 is a Java framework for modern Java web applications. 项目地址: https://gitcode.com/gh_mirrors/framework225/framework Vaadin Framework是一个功能强…...
【亲测免费】 ST官方开源电机库FOC5.0:电机控制的利器
ST官方开源电机库FOC5.0:电机控制的利器 【下载地址】ST官方开源电机库FOC5.0下载仓库 ST官方开源电机库FOC5.0 下载仓库本仓库提供ST官方开源的电机库FOC5.0的资源文件下载 项目地址: https://gitcode.com/open-source-toolkit/a21b5 项目介绍 在电机控制领…...
如何在Windows 11上搭建专业级Android开发环境:WSA完全指南
如何在Windows 11上搭建专业级Android开发环境:WSA完全指南 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA Windows Subsystem for Android&…...
GameEngineFromScratch输入管理系统:跨平台输入事件处理机制终极指南 [特殊字符]
GameEngineFromScratch输入管理系统:跨平台输入事件处理机制终极指南 🎮 【免费下载链接】GameEngineFromScratch 配合我的知乎专栏写的项目 项目地址: https://gitcode.com/gh_mirrors/ga/GameEngineFromScratch GameEngineFromScratch输入管理系…...
2026年热门抠图软件怎么选?好用的抠图工具实测对比指南
抠图需求在生活和工作中越来越常见——无论是制作证件照、电商产品展示,还是社交媒体内容编辑,一款趁手的抠图工具能省去大量时间。但市面上的抠图软件五花八门,功能各不相同,如何找到最适合自己的那一款?本文将从多个…...
从零到精通:Unity Timeline信号(Signal)与自定义轨道(Playable Track)的保姆级教程
从零到精通:Unity Timeline信号与自定义轨道实战指南 在Unity中制作电影级过场动画时,Timeline无疑是开发者最强大的工具之一。但许多开发者仅仅停留在基础动画剪辑的层面,未能充分挖掘其深度交互潜力。本文将带您突破常规用法,探…...
保姆级教程:从Solidworks模型到Matlab SimMechanics仿真,搞定你的六轴机械臂动力学分析
六轴机械臂动力学仿真全流程:从Solidworks到Matlab SimMechanics实战指南 在工业自动化与机器人研发领域,机械臂的动力学仿真已成为验证设计合理性的关键环节。本文将手把手带你完成从Solidworks三维建模到Matlab SimMechanics动力学仿真的完整工作流&am…...
Linux用户的终极翻译助手:3种智能翻译方式完全指南
Linux用户的终极翻译助手:3种智能翻译方式完全指南 【免费下载链接】CuteTranslation Linux屏幕取词翻译软件 项目地址: https://gitcode.com/gh_mirrors/cu/CuteTranslation 你是否曾在Linux系统中阅读英文文档时频繁切换浏览器查词?是否因为图片…...
