[LeetCode] 45. Jump Game II

一、问题描述

在这里插入图片描述

二、问题分析

这道题虽说是55题的升级版,问法也差不多,但在解题思路上却跟上题很大的不同。55题是问能否到达最后一个元素位置,而45题问的是最少多少步能到达最后的位置(前提是已经确定能够到达)。本题所有的算法就是贪心算法,每次访问一个位置,看看它能到达的最远位置之内的其他位置所能到达的最远位置是多少。每次偶读贪心的选择最远的位置,这样能保证总步数最小。主要原因是这个数组是二维的,因此每次选最远即可。因此这个问题有两个循环。外循环看看此位置可达的最远位置是多少,内循环在此位置与标记的最远位置之间进行遍历,而每个内循环也被我称作一层。

三、问题求解

针对问题分析,以下是c++源代码:


class Solution {
public:
    int jump(vector<int>& nums) {
    	if (nums.size() == 1) return 0;
    	int steps = 0;
        int maxStep = 0;
        int currentSetp = 0;
        int n = nums.size();

        while (currentSetp < n) {
        	steps++;
        	int tempStep = currentSetp + nums[currentSetp];
        	if (tempStep > maxStep) maxStep = tempStep;
        	if (maxStep >= n - 1) {
        		return steps;
        	}
        	currentSetp++;

        	int layer = maxStep;
        	while (currentSetp < layer) {
        		int tempStep2 = currentSetp + nums[currentSetp];
        		if (tempStep2 > maxStep) maxStep = tempStep2;
        		if (maxStep >= n - 1) {
        			return ++steps;
        		}
        		currentSetp++;
        	}
        }
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值