华为OD机考算法题:找终点

news/2024/7/19 20:38:25 标签: 华为od, 算法, 数据结构, Java, Javascript

目录

题目部分

解读与分析

代码实现


题目部分

题目找终点
难度
题目说明给定一个正整数数组,设为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(n^{2})。


代码实现

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);
}

(完)


http://www.niftyadmin.cn/n/5074455.html

相关文章

Survey on Cooperative Perception in an Automotive Context 论文阅读

论文链接 Survey on Cooperative Perception in an Automotive Context 0. Abstract 本文就协同基础设施领域提供相关环境的调查回顾了感知中涉及的主要模块&#xff1a;定位&#xff0c;目标检测和跟踪&#xff0c;地图生成提供了协同感知的 SWOT 1. Intro 无人驾驶汽车的背…

【b站韩顺平 快速学Java课】(超详细)安装完JDK后的环境变量配置教程 总结

安装JDK8&#xff08;包括JRE8&#xff09;教程笔记看这个&#xff1a;http://t.csdnimg.cn/QVPXf 1.为什么要配置环境变量&#xff1a; 拿我之前安装完JDK8但是还没配置环境变量的时候的情况举例&#xff1a; &#xff08;1&#xff09;winR输入cmd打开控制台 &#xff08;…

WPF TextBox长文本模式

需求&#xff1a;TextBox长文本模式状态下 1、需要滚动条 2、不可编辑 3、不能选择文本 <ScrollViewer Width"738" Height"477" Margin"0,10,0,0"> <TextBox FontSize"32" TextBlock.Li…

基于SpringBoot的大学生竞赛管理系统

目录 前言 一、技术栈 二、系统功能介绍 学生信息管理 教师信息管理 竞赛报名审核 竞赛信息管理 竞赛信息管理 竞赛报名管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施…

端粒/端粒酶生信切入点,6+端粒酶+泛癌+甲基化+实验。

今天给同学们分享一篇端粒酶泛癌甲基化实验的生信文章“Genomic, epigenomic, and transcriptomic signatures for telomerase complex components: a pan‐cancer analysis”&#xff0c;这篇文章于2022年10月31日发表在Mol Oncol期刊上&#xff0c;影响因子为6.6。 激活端粒酶…

【算法题】100103. 分类求和并作差

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 题目&#xff1a; 给你两个正整数 n 和 m 。 现定义…

常见算法-三色棋(Gossip)

常见算法-三色棋&#xff08;Gossip&#xff09; 1、说明 三色旗的问题最早由E.W.Dijkstra所提出&#xff0c;他所使用的用语为Dutch Nation Flag(Dijkstra为荷兰人)&#xff0c;而多数的作者则使用Three-Color Flag来称之。 假设有一条绳子&#xff0c;上面有红、白、蓝三种…

漏刻有时数据可视化大屏引导页设计2(偏移卡片、动态数字翻牌、countUp.min.js)

引入外部文件 <title>漏刻有时引导页</title><script src="js/jquery-3.3.1.min.js"></script><script src="js/countUp.min.js"></script><link rel="stylesheet" href="css/common.css">…