华为机试:数字跳跃

2023.05-B卷-华为OD机试 - 跳房子I-”新加题型“(100分值) 跳房子,也叫跳飞机,是一种世界性的儿童游戏。游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格跳房子的过程中,可以向前跳,也可以向后跳。假设房子的总格数是count,小红每回合可能连续跳的步教都放在数组steps中,请问数组中是否有一种步数的组合,可以让小红两个回合跳到量后一格?如果有,请输出索引和最小的步数组合。注意:数组中的步数可以重复,但数组中的元素不能重复使用。提供的数据保证存在满足题目要求的组合,且索引和最小的步数组合是唯一的。 阅读详情
数字跳跃:

给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。下为例子:

输入:
7
2
3
2
1
2
1
5
输出:
3
说明: 第一个数7为输入的数组长度。之后数字本身代表此处可以跳跃的最大距离,此时有2种跳法,为2-2-2-5和2-3-2-5都为3步

思路:考试时,第一眼没有思路,直接贪心算法,每一步尽可能跳得更远,差不多十分钟写完,提交过了60%数据,应该是可以进入下一轮吧。
我的完整思路是:先对这个数组标识一下生成brr数组,规则如下:第0个元素加0,第1个元素加1,第i个元素加i,其实就是判断当前可跳跃数字中,跳到最大的那个数字就行了。

import java.util.Scanner;
/**
7
2
100
2
1
2
1
5

7
2
3
2
1
2
1
5

4
2
100
2
1
 * 
 * @author muyichun
 *
 */
public class Main20 {
	
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
            int n = Integer.valueOf(sc.nextLine());
            int[]arr = new int[n];
            for (int i = 0; i < arr.length; i++) {
            	arr[i] = Integer.valueOf(sc.nextLine());
            }
            /*贪心算法
            int min = 9999;
            int step = 0;
            int i = arr[0];
            for (;i < n; i+=arr[i]) {
            	System.out.println(i);
            	step++;
            }
            System.out.println(step);
            */
            //标识数组
            int[]brr = new int[n];
            int index = 0;
            for (int q = 0; q < n; q++)
            	System.out.printf("%3d ",arr[q]);
            System.out.println();
            for (int q = 0; q < n; q++) {
            	brr[q] = arr[q] + index++; 
            	System.out.printf("%3d ",brr[q]);
            }
            System.out.println();
            for (int q = 0; q < n; q++) {
            	System.out.printf("%3s ",q);
            }
            System.out.println();
            int step = 0;
            int a = 0;
            for (; a < n-1;) {
	            int max = -1;
	            int flag = -1;
	            int num = Math.min(n-1, brr[a]);
	            for (int i = a+1; i <= num; i++) {
	            	if (brr[i] >= max) {
	            		max = arr[i]; flag = i - a;
	            	}
	            }
	            step++;
	            System.out.println("第"+step+"步: "+ a+"->"+(a+flag));
	            a += flag;
            }
            System.out.println("最少步数为:" + step);
        }
        
    }
    
}
华为机试——2018年校招 10号参加的华为的机试,这次的3道题难度适中。第一题字符串,第二题贪心算法,dp可以解,第三题长整数相乘。因为题主做过第三题原题,刚开始就把第三题秒了~~然后开始做第一题,一般10分钟就可以搞定。第二题要想一下,不过也差不多是原题,Leetcode上第55题jump game应该是此题原型。因为都刷过几乎是原题的原故,一个小时不到3题就AC完了下面是完整题目和代码                 ... 阅读详情

相关推荐

2024华为OD机试真题-跳格子3-(C++/Python/Java)-C卷D卷-200分

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

goldarmour的博客 958

[JWFD开源工作流]为实现智能工作流的跳跃模式而做的一些设计和思考

NULL 博文链接:https://comsci.iteye.com/blog/2124027

华为OD机试——深度解读跳格子游戏及其多语言实现(C++、Java、JavaScript、Python)

在华为OD机试中,跳格子问题是一道典型的图论问题,考察了应试者对深度优先搜索、图的环检测等基本算法的掌握情况。通过本文的深入解析和多语言实现,希望读者能够更好地理解这一问题的解题思路,并在实际面试或笔试中应对类似问题时游刃有余。参考资料优快云华为OD专栏LeetCode题库。

m0_57781768的博客 600

华为笔试跳跃问题

华为笔试跳跃问题-python实现1 题目描述2 python实现 昨天做了一个华为的笔试,做的时候有点急躁,很多地方不完善,通过率只有20%,今天完善了一下。哎感觉又凉了。 1 题目描述 给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。下为例子: 输入: 7 2 3 2 1 2 1 5 输...

MajinWakeup的博客 948

华为OD机试 - 跳格子2 - 动态规划(Java 2024 B卷 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 3020

【华为OD机试B卷,GO题解独家】找终点

要求输出在最少的跳跃次数下能够跳到 nums 数组的最后一个位置的步数(包括起点和终点),如果不能跳到,则输出 -1。从第二步开始,只能以所在成员的数字走相应的步数,不能多也不能少, 如果目标不可达返回-1,只输出最少的步骤数量。,最大为 100 个成员,求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。由正整数组成的数组,以空格分隔,数组长度小于 100,请自行解析数据数量。只能向数组的尾部走,不能往回走。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

【华为机试真题 Python实现】华为机试题整理(已更新211篇)

拆分输出字符串 求n阶方阵里所有数的和 合法的三角形个数 整型数组求整数对最小和 机器人走迷宫【2022 Q1 Q2 |200分】 数格子 两个超大整型数相加 字符串格式化输出【2022 Q1 Q2 |100分】 树形目录操作【2022 Q1 Q2 |200分】 整型数组按个位值排序 奥运会奖牌榜的排名【2022 Q1 | 100分】 无重复字符的最长子串 最长回文子串 两个字符串的最长公共子串 括号生成 字符串处理 一个正整数到 Excel 编号之间的转换 字符串压缩 搜索矩阵 免单统计 数组的转换 藏宝

2万+

【华为机试真题Python】从入门到入职-真题列表导读

华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分。总分为400分,150分钟考试时间。之前通过为150分,现在好像分数提高了,大家不要太大意,一定要多刷题,争取拿高分,毕竟分数越高评级越高,工资也就越高。OD的工资待遇还是很可观的15K-30K*14-16,希望大家努力(肺腑之言)本专栏有100+道题(持续更新中),都是往期的HW机试真题,根据过往同学的经验基本都会考到原题。大家有什么不懂的都可以留言。真题列表(持续更新中)

3432

华为OD机试(2022&2023)真题目录 + 考点 + 复盘思路

华为OD,千机百炼

学Java,找哪吒 9488

【华为OD机试考生抽中题 C&D卷】跳马问题,用 Python 编码,速通

考虑多匹马的情况,将所有马的 mat 叠加成一个总的二维矩阵 ans_mat,对于每一个点(x, y)而言,其逻辑如下。棋盘内的马移动类似于中国象棋中的马移动,先在水平或者垂直方向上移动一格,然后再将其移动到对角线位置。请问能否将棋盘上所有的马移动到同一个位置,若可以请输入移动的最小步数。能否将棋盘上所有的马移动到同一个位置,若可以请输入移动的最小步数。表示该位置为空的,棋盘内的数字表示为该马能走的最大步数。棋盘内的马可以移动到同一个位置,同一个位置可以有多匹马。目前已服务 100+同学成功上岸!

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1781

2023华为od机试C卷【幸存数之和】Python 实现

一个跳数jump,及幸存数量 left。给一个正整数数列 nums,运算过程为:从索引0的位置开始向后跳,中间跳过了J个数字,命中索引为 J+1 的数字,该数被敲出,并从该点起跳,以此类推,直到幸存 left 个数为止,然后返回幸存数之和。

MISAYAONE的博客 1204

【华为机试 Python实现】华为机试题集合(已更新171篇)

专栏定价99.9 包含 《华为机试真题》的所有题目。包含动态规划系列文章、、等包含Python 八股文专栏的 三篇基础文章、和等系列文章还在更新中…可关注公众号回复 “试看” 可免试读。 初识动态规划(斐波那契数列) 小兔子繁殖详解 数大雁【2022 Q2 | 100分】 比较两个版本号的大小 统计文本数量 N进制减法 最大社交距离 找到比自己强的人数 二叉树层序遍历(从后序与中序遍历序列构造二叉树) 完全二叉树非叶子部分后序遍历 服务失效判断 竖直四子棋 矩阵扩散 计算最小时延 快速人名查找 图像物体的边

5005

华为OD机试C++实现 - 最小步骤数

最小步骤数 题目 一个正整数数组,设为nums 最大为100个成员 求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数 要求: 第一步,必须从第一元素起,且1

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 3435

华为机试——输出最小跳跃次数

题目描述 * 题目描述:给出一组正整数,你从第一个数向最后一个数方向跳跃, * 每次至少跳跃1格,每个数字的值表示你这个位置可以跳跃的最大长度。 * 计算如何以最少的跳跃次数跳到最后一个数。 * 输入描述: * 第一行表示有多少个数n  * 第二行依次是1到n,一个数一行。 * 输出描述: * 输出一行,表示跳跃最少...

Your Dream Started 1291

华为OD机试 - 跳跃游戏 II(Python/JS/C/C++ 2024 E卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:返回到达 nums

学Java,找哪吒 1298

2023华为od机试C卷【幸存数之和】C++ 实现

一个跳数jump,及幸存数量 left。给一个正整数数列 nums,运算过程为:从索引0的位置开始向后跳,中间跳过了J个数字,命中索引为 J+1 的数字,该数被敲出,并从该点起跳,以此类推,直到幸存 left 个数为止,然后返回幸存数之和。

MISAYAONE的博客 945

最小跳跃次数

1. 最小跳跃次数 1. 最小跳跃次数 1.1. 题目描述: 1.2. 解题思路 1.3. 实现代码 出自华为实习机试第二题: 1.1. 题目描述: 先输入一个数字代表数字总数 然后依次输入几个数字,代表当前位置能跳跃的最大步数,求到最后一个位置的最小跳跃次数。 示例 输入: 7 2 3 2 1 2 ...

明年暑假升初中的博客 2824

【华为OD机试考生抽中题 B卷】找终点,用 C 编码,速通

要求输出在最少的跳跃次数下能够跳到 nums 数组的最后一个位置的步数(包括起点和终点),如果不能跳到,则输出 -1。从第二步开始,只能以所在成员的数字走相应的步数,不能多也不能少, 如果目标不可达返回-1,只输出最少的步骤数量。,最大为 100 个成员,求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。参加华为 od 机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。由正整数组成的数组,以空格分隔,数组长度小于 100,请自行解析数据数量。给定一个正整数数组,设为。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+
上一篇: 华为机试练手
下一篇: 四种高性能方式实现单例模式
慕一春
博客等级 码龄12年 19粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值