博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leedcode45----跳跃游戏2
阅读量:3960 次
发布时间:2019-05-24

本文共 1401 字,大约阅读时间需要 4 分钟。

Leedcode45----跳跃游戏2

方案一:动规+逆向思维

class Solution{
//逆向思维 public int jump(int[] nums) {
int f[] = new int[nums.length]; f[nums.length-1] = 0; for(int i=nums.length-2;i>=0;i--) AddNew(f,nums,i); return f[0]; } //f[i]代表从从索引i到达最后需要的最少步数(dp),f[i]=-1代表其无法到达最后 void AddNew(int f[],int[] nums,int index) {
int firstPosi = nums.length-1; if(index+nums[index]
=index+1;i--)//只看f[index]到达的聊得地方 {
//该位置不可用 if(f[i]==-1) continue; //当f[index]=0时,此时不可以做最小比较,因为做了还是0 //这个时候是初始时候 if(f[index]==0) {
f[index] = f[i]+1; } else {
f[index]= java.lang.Math.min(f[index],f[i]+1); } } //无法到达则改为-1 if(f[index]==0) f[index]=-1; }}

在这里插入图片描述

事实证明上面的代码是正确的,但是复杂度太高

2.贪心

基本思路:f[i]表示从0到i所需要的最小1步数;f[i]的排列方式为0 1 1 1 2 2 2 3 3 3 4 4 ...一直到最后一个位置
class Solution{
public int jump(int[] nums) {
//表示从f[i]表示从0到i的最小步数,其中f[0]=0 int[] f = new int[nums.length]; //i表示当前段的起点,表示终点 // 比如0为一段,1 1 1又为一段 int i=0,j=0,current=1; int num = 0;//开始进入字段1的标记 while(j
nums.length-1) max = nums.length-1; num++; i=j+1; j=max; } return num; }}

转载地址:http://jplzi.baihongyu.com/

你可能感兴趣的文章
出国以后才知道英语应该怎么学
查看>>
计算机专业权威期刊投稿经验总结
查看>>
如何在三个月内学会一门外语?
查看>>
看看你对Linux到底了解多少?
查看>>
网上看到的:ARM入门最好的文章(转)
查看>>
中国最美情诗100句
查看>>
javascript注册window的onload事件问题研究
查看>>
客户端技术分页控件javascript+css,可用于任何服务器端技术
查看>>
学习Swing 的网站[转]
查看>>
Google App engine 的第一个应用 midispot
查看>>
提问的智慧
查看>>
关于dom4j无法解析xmlns问题及生成非UTF-8字符集乱码问题的解决
查看>>
很好的一篇文章 如果让我重做一次研究生 王汎森
查看>>
保护U盘批处理文件
查看>>
hibernate 自动导入sql 文件import.sql 国际化编码的问题的解决方案
查看>>
第七颗头骨 & 忘魂花 凤凰
查看>>
李小龙哲学之言
查看>>
[心情] 如果有一天
查看>>
[Linux] 常用 linux 系统命令及维护备忘
查看>>
[Linux] 关于 Ext4 HowTo
查看>>