博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode45.跳跃游戏II
阅读量:5299 次
发布时间:2019-06-14

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

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。

从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。  

说明:

假设你总是可以到达数组的最后一个位置。

来源:力扣(LeetCode) 链接: 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:贪心算法,每次在可到达的区间内找到下一次能够到达最远的位置。

比如:{2,3,1,1,4}

首先在数组的第一位和第二位之间开始找(数组从0开始算),得到最远位置为跳到数组第一位(即值为3),然后在数组第二位与第4位之间找,得出最远位置为第四位(值为4)。

public int jump(int[] nums) {        if(nums.length == 0 || nums == null) return  0;        //记录结果        int result = 0;        //查找区间末尾        int end = 0;        //下一个查找区间的末尾        int nextEnd = 0;        //由于在第0位时加一,但此时指针未跳,所以减一        for (int i = 0;i < nums.length-1;i++){            nextEnd = nextEnd > (nums[i] + i) ? nextEnd : (nums[i] + i);            //当前查找区间结束            if(end == i){                result++;                end = nextEnd;            }        }        return result;    }复制代码

转载于:https://juejin.im/post/5d4eb340e51d453b5e465afb

你可能感兴趣的文章
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>