zoukankan      html  css  js  c++  java
  • 贪心算法-跳跃游戏——b

    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 }
  • 相关阅读:
    龟兔赛跑(多线程练习题)
    进程和线程详解
    toString()方法详解
    使用IDEA的Git插件上传项目教程
    js运算符单竖杠“|”的用法和作用及js数据处理
    vue项目axios请求接口,后端代理请求接口404,问题出现在哪?
    jQuery的ajax的post请求json格式无法上传空数组
    es6 学习小记 扩展运算符 三个点(...)
    select2插件使用小记2
    js中多维数组转一维
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/10861422.html
Copyright © 2011-2022 走看看