博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jump game
阅读量:4322 次
发布时间:2019-06-06

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

Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Determine if you are able to reach the last index.

For example:

A = [2,3,1,1,4], return true.

A = [3,2,1,0,4], return false.

 

。。数组中的数字表示最多可以跳几步。贪心的题,,用“局部最优和全局最优解法”。我们维护一个到目前为止能跳到的最远距离,以及从当前一步出发能跳到的最远距离。局部最优(当前出发能跳到的最远距离)local=A[i]+i,而全局最优则是global=Math.max(global, local)。只要最远距离能到最后一个位置就行。

class Solution {    public boolean canJump(int[] nums) {        /*题目说:数组中的每个数字代表当前位置最多可以跳几步。*/        if(nums==null||nums.length==0) return false;        int reach=0;//能跳到的最远距离        //当前位置如果大于最远距离,跳出循环,因为前面都跳不到这里。        for(int i=0;i
<=reach;i++){ reach=Math.max(nums[i]+i,reach); } if(reach

 还有反向的思维:从倒数第二个元素往前看,该位置开始跳,能否跳过最后一个元素,如果不能,则看前面一个位置;如果可以,则只要考虑前面位置能否跳到该位置。

public class Solution {      public boolean canJump(int[] A) {          int last = A.length - 1;          for (int i = A.length - 2; i >= 0; i--) {              if (i + A[i] >= last) {                  last = i;              }          }          return (last <= 0);      }  }

 

自己的做法:自己想着,跳不到最后都是因为跳0步导致的。从后往前找0,然后看前面的元素能否跳过这个0,也就是前面元素是否大于该元素到0的 距离。如果跳不过,则要返回false。。

for(int i=nums.length-2;i>=0;i--){            if(nums[i]==0){                int index=0;                                while((--i)>=0&&nums[i]<=(++index)){}                if(i<0) return false;                            }        }return true;

 

转载于:https://www.cnblogs.com/xiaolovewei/p/8195508.html

你可能感兴趣的文章
网页开发学习笔记八: css 盒子模型
查看>>
一道课本题目引发的思考的再补充
查看>>
9.25
查看>>
javascript函数
查看>>
java泛型中<?>和<T>有什么区别?
查看>>
Vue.js——60分钟组件快速入门
查看>>
logback配置方式
查看>>
laravel 数据库操作小例子
查看>>
javascript中对象属性的介绍
查看>>
3天CSS总结
查看>>
一周复习总结(一)第二周
查看>>
similarity 字符串编辑距离相似度匹配
查看>>
linux中什么是shell?
查看>>
谈谈MySql数据库锁
查看>>
Mac上搭建rtmp流媒体服务器(结合FFmpeg的使用)
查看>>
mybatis06--动态sql
查看>>
C# WinForm开发系列 - Controls
查看>>
Thrust快速入门教程(二)——Vector的使用
查看>>
Java的概念
查看>>
opencv图像线性混合&imread()
查看>>