Java - 贪心算法 - 跳跃游戏
来源:互联网 发布:第三方软件测试服务 编辑:程序博客网 时间:2024/05/16 15:35
给定一个非负整数数组,假定你的初始位置为数组第一个下标。
数组中的每个元素代表你在那个位置能够跳跃的最大长度。
请确认你是否能够跳跃到数组的最后一个下标。
例如:
A = [2,3,1,1,4],
return true.
A = [3,2,1,0,4],
return false.
格式:
第一行输入一个正整数n,接下来的一行,输入数组A[n]。如果能跳到最后一个下标,输出“true”,否则输出“false”
样例输入
52 0 2 0 1
样例输出
true
<span style="font-size:14px;">import java.util.Scanner;public class Main{public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); /* * 思路:贪心算法; * 从第一个数开始, 寻找可以一个可以跳最远的点; * 例1:3 1 2 4 1 0 0 * 1.从第一个位置0,可以跳到位置1和位置2和位置3; * 2.如果跳到位置1,那么最远就可以跳到位置(1+1); * 3.如果跳到位置2,那么最远就可以跳到位置(2+2); * 4.如果跳到位置3,那么最远就可以跳到位置(3+4); * 5.故选择跳到位置3 ,重复1.2.3步; * * 算法分析: * 1.如果选择跳到位置3 ,就无法跳到位置2和位置3, 那么会不会因此错过最优解? 答:不会! * 2.因为任意位置1和位置2能到达的位置, 位置3都可以到达; * 3.故不会错过最优解; */ int[]a = new int[n]; for(int i= 0 ;i< n ;i++) { a[i] = sc.nextInt(); } int i; int l;//左边界控制搜索的起始位置 int r;//右边界控制搜索的终止位置 for( i= 0 ;i< n && a[i]!= 0 ;) {//当a[i]==0 时 , 该位置为可到达的最远位置 r = i + a[i]; l = i + 1; for(int j= i+1 ;j< n && j<= i+a[i] ;j++) {// if(j+a[j] >= r){//遍历可到达位置 能到达的最远位置 r = j+ a[j];//更新左右边界 l = j; } } i = l;//左边界 } if(i< n-1) { System.out.println("false"); }else{ System.out.println("true"); }}}</span>
0 0
- Java - 贪心算法 - 跳跃游戏
- 计蒜客 跳跃游戏 贪心
- 计蒜客 跳跃游戏 贪心
- 计蒜客-跳跃游戏(贪心)
- 有趣的算法问题12——跳跃游戏1(贪心算法)
- Java实现-跳跃游戏1
- Java实现-跳跃游戏2
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 算法爱好者——算法题:跳跃游戏 ? 待解决
- 青蛙跳跃对调位置游戏的穷举解决算法
- "Contains Duplicate II" and "Merge Sorted Array"
- 带有安全认证的webservice
- 简单题_用两个栈实现队列和用两个队列实现一个栈
- 订餐系统之Excel批量导入
- APP图片缓存与Glide之signature的分析
- Java - 贪心算法 - 跳跃游戏
- GPS坐标换算为百度坐标
- 【配置属性】—Entity Framework实例详解(DataAnnotations and Fluent API)
- Cxf Webservice安全认证
- 英伟达机器学习5大网红GPU卡
- SVN错误:Attempted to lock an already-locked dir
- 0-1背包问题(回溯法)
- android中对/data/data/<package name>/files下文件的读写操作
- Spring Boot下无法加载主类 org.apache.maven.wrapper.MavenWrapperMain问题解决