1、题目描述

  • 定一个非负整数数组,你最初位于数组的第一个位置。
  • 数组中的每个元素代表你在该位置可以跳跃的最大长度。
  • 你的目标是使用最少的跳跃次数到达数组的最后一个位置。

2、问题分析

  这也是一道跳跃问题,但是这道题的目的是让我们计算跳到最后一个位置的最小跳跃次数。我们一直的是这个数组一定能从第一个位置跳到最后一个位置,但是不同的跳跃情况跳跃的次数是不一样的,怎样能保证跳跃的次数是最少的呢?跳的次数最少其实就是保证尽可能少的跳跃次数也能最后达到数组最后一个位置。

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

3、算法思路

回想第一个跳跃问题情景,我们是保证在遍历整个数组的过程中记录下经过的index[]中能跳到最远位置的值max_index,在jump往后遍历的过程中,只要保证jump的值一直小于或者等于max_index的值,其实就相当于是我们能一直往后跳跃,最后比较jump是不是能跳到index[]数组的最后一个位置。但这里我们稍微转变一下思路就好了:贪心思想(能不跳就尽量不跳,不跳就一直往下走)要想尽可能少的跳跃到最后一个位置,那么我们就保证能不跳跃就不跳跃,实在是往下没办法往下走的情况下就跳跃一次。但这一次跳跃是跳到哪里呢?跳到能保证下一走的距离最远的位置就是最合适的位置。

4、解题代码

 1 package com.baozi.test;
 2
 3 /**
 4  * @author BaoZi
 5  * @create 2019-05-14-20:24
 6  */
 7 public class Solution6 {
 8     public static void main(String[] args) {
 9         int[] nums=new int[]{2,3,1,1,4};
10         int jump = Solution6.jump(nums);
11         System.out.println(jump);
12     }
13
14     public static int jump(int[] nums) {
15         if (nums.length < 2) {
16             return nums.length;
17         }
18         //前边的边界值已经检测过了,所以这里最少会跳一次
19         int jump_min = 1;
20         int current_len = nums[0];
21         int pre_max_len = nums[0];
22         for (int i = 1; i < nums.length; i++) {
23             //只有当不能再继续往下走的情况下才会跳一步,而且这一步还要保证能在接下来尽可能走的更远
24             if (i > current_len) {
25                 current_len = pre_max_len;
26                 jump_min++;
27             }
28             //当在遍历的过程中,当发现能够跳到更远的位置的时候使用pre_max_len变量记录下更远的位置
29             if (pre_max_len < nums[i] + i) {
30                 pre_max_len = nums[i] + i;
31             }
32         }
33         return jump_min;
34     }
35 }

转载于:https://www.cnblogs.com/BaoZiY/p/10861422.html

贪心算法-跳跃游戏——b相关推荐

  1. 贪心算法——国王游戏

    题目描述 孙悟空给花果山的小猴子们分桃子. 首先,他让每只小猴在左.右手上面分别写下一个整数,悟空自己也在左.右手上各写一个整数. 然后,让这 n 只小猴排成一排,悟空站在队伍的最前面. 排好队后,所 ...

  2. 每日一题_贪心_55_跳跃游戏

    前言 date: 8.10 今天终于早起了,困困困~~~ 题目来源: 55. 跳跃游戏(leetcode) 汇总文章 每日一题系列_算法提升 题目 题解 遍历一遍数组,并维护一个最右可到达边界的变量. ...

  3. [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

    [问题描述][Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2.从下标为 0 跳到下标为 1 的位置 ...

  4. 笔记1 第11课 贪心初步 ——柠檬水找零,分发饼干,跳跃游戏,完成所有任务所需最小能量——极客时间算法

    之前收藏了极客时间的算法训练营3期 共21课,计划每一课写博客来记录学习,主要形式为 方法类型1 题1 题解 题2 题解 方法类型2 题1 题解 -- 题目大体来自leetcode 和 acwing ...

  5. _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II

    _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...

  6. 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

    LeetCode 122.买卖股票的最佳时机II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票 ...

  7. LeetCode算法题6:贪心 - 跳跃游戏

    文章目录 前言 贪心算法: 一.跳跃游戏 思路 二.跳跃游戏II 思路 总结 前言 贪心算法系列:(之前还有一篇文章描述的也是贪心算法:https://blog.csdn.net/Little_ant ...

  8. 贪心算法很简单:跳跃游戏

    题目描述: 定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: ...

  9. 贪心算法:跳跃游戏总结

    55. 跳跃游戏:给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 遍历能到达的最远距离end(初始化为n[0] ...

最新文章

  1. go package学习——os
  2. 《深度学习革命》作者:GAN令我惊艳,现在的人们对AI操之过急了
  3. tts和字符集的关系--要求源和目的端的数据库字符集必须一样,国家字符集必须一样。...
  4. body区域怎么传一个数组_用户输入的虎狼之词,怎么校验之后不见了?
  5. springboot启动报错:org/springframework/expression/ParserContext
  6. 预定义异常 - PHP手册笔记
  7. 阿里 BladeDISC 深度学习编译器正式开源
  8. Docker搭建WebLogic服务器
  9. dev调试时无法进入下一步_【问题解决方案】Dev C++ 无法调试的问题与解决
  10. python成绩统计_python统计考试成绩排名
  11. 管理信息系统重要知识点整理
  12. 微信真机调试遇到“errno“:600001,“errMsg“:“request:fail -200:net::ERR_CERT_COMMON_NAME_INVALID
  13. 如何实现Spark SQL 字段血缘?
  14. python chr黑方格_Python中的chr()
  15. 40岁想在职读计算机博士,年龄超过四十五岁还有机会报考在职博士吗
  16. 总结三种方法使用Service实现在后台播放音乐、暂停音乐、停止音乐的功能
  17. Python 数据可视化基础教程
  18. 【编译原理】 如何将控制语句翻译成四元式
  19. 在Windows系统下安装VirtualBox6.1.1并且安装linux虚拟机
  20. Flash鼠标拖尾效果

热门文章

  1. CHOJ# 在线编译及评判系统(OnlineJudge)2.0 Beta2
  2. python是什么语言、即变量不需要显示声明数据类型-python变量声明及简单数据类型...
  3. python爬取图片-Python爬取网页中的图片(搜狗图片)详解
  4. python起步输入-第 4 节 小Python 起步
  5. python有趣的小项目-10 个最值得 Python 新人练手的有趣项目
  6. python 能干嘛-python能干嘛
  7. python编写的软件界面-用Python写一个带图形界面的文件压缩软件
  8. python爬虫代码1000行-Python爬虫教程(16行代码爬百度)
  9. python 基础命令-Python unittest第一篇:基础入门+命令行编译
  10. python编程 入门到实践-Python编程入门到实践(二)