zoukankan      html  css  js  c++  java
  • leetcode-45.跳跃游戏II(hard)

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

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

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

    示例:

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/jump-game-ii

    借鉴别人的做法,使用动态规划。

    首先明确一点:从某点走到该点所能够得着的点只需一步

    dp[i] 表示走到该点所需的最少步数

    dp[i] -> dp[i+1]...dp[i+nums[i]] = dp[i]+1;

    从前到后遍历数组,在每一点处遍历该点所能到达的点,如果能到终点,直接返回该点步数+1,否则,将该点所能到达范围内的无法到达点置为该点步数+1。

    代码:

     1 class Solution {
     2 public:
     3     int jump(vector<int>& nums) {
     4         int len = nums.size();
     5         if(len <= 1)
     6             return 0;
     7         
     8         vector<int> dp(len, 0);
     9         for(int i=0; i<len; i++)//外循环,遍历各点
    10         {
    11             for(int j=nums[i]; j>0; j--)//从后往前判断所能到达的范围
    12             {
    13                 if(i+j >= len-1)//如果能到达终点,直接返回
    14                     return dp[i]+1;
    15                 else if(dp[i+j] == 0)//不能到达终点且步数为0,将他置为i点可达
    16                     dp[i+j] = dp[i] + 1;
    17                 else   //在此之前,已经有点可达此点,且之前的点也已可达,无需更新
    18                     break;
    19             }
    20         }
    21         return -1;
    22     }
    23 };
  • 相关阅读:
    获取 .properties 配置文件中的值
    struts1.2分页实现思路
    Apache与Tomcat的3种连接方式分析
    HTML 中的rel
    自动刷新本页,定时刷新页面,定时转发
    HTML 中的rel 用法
    <globalforwards>标签
    struts1.2中从一个action跳转到另外一个action的方法
    分页传值的话,可以直接用<html:link>
    DIV+CSS效果(实现平滑投票效果等)
  • 原文地址:https://www.cnblogs.com/yocichen/p/11464962.html
Copyright © 2011-2022 走看看