LeetCode 45. Jump Game II

xiaoxiao2021-02-27  238

题意

n 个点,每个点有从这个点最多能前进的距离,求从第一个点到最后一个点的最少步数

思路

首先应该想到搜索,但是DFS太耗时,所以想到 BFS ,但是如果按照距离来进行搜索,可能还是会超时,所以说要使用其他方法,可以发现,选择的落脚点必然是越靠近终点越好,所以设置三个变量:

maxLoc :当前选择的落脚点能到达的最远处 maxPos :当前遍历点能到达的最远处 ans :记录当前已走的步数

在遍历过程中更新 maxPos ,当遍历点到达 maxLoc 的时候,更新步数和 maxLoc ,同时初始化 maxPos ,以便后面的更新.

代码

class Solution { public: int jump(vector<int>& nums) { size_t len = nums.size(); int maxLoc = 0, maxPos = 0, ans = 0; for(int i = 0; i < len; i++){ if(maxLoc >= len - 1) break; maxPos = max(maxPos, i + nums[i]); if(i == maxLoc){ ans++; maxLoc = maxPos; maxPos = -1; } } return ans; } };
转载请注明原文地址: https://www.6miu.com/read-11389.html

最新回复(0)