淄博学校网站建设哪家好,软件是如何开发的,响应式网站是做多大尺寸,购物网站建设项目可研报告文章目录 写在前面Tag题目来源题目解读解题思路方法一#xff1a;贪心 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法#xff0c;两到三天更新一篇文章#xff0c;欢迎催更…… 专栏内容以分析题目为主#xff0c;并附带一些对于本题涉及到的数据结构等内容… 文章目录 写在前面Tag题目来源题目解读解题思路方法一贪心 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法两到三天更新一篇文章欢迎催更…… 专栏内容以分析题目为主并附带一些对于本题涉及到的数据结构等内容进行回顾与总结文章结构大致如下部分内容会有增删 Tag介绍本题牵涉到的知识点、数据结构题目来源贴上题目的链接方便大家查找题目并完成练习题目解读复述题目确保自己真的理解题目意思并强调一些题目重点信息解题思路介绍一些解题思路每种解题思路包括思路讲解、实现代码以及复杂度分析知识回忆针对今天介绍的题目中的重点内容、数据结构进行回顾总结。 Tag
【贪心】【数组】 题目来源
面试经典150 | 45. 跳跃游戏 II 题目解读
给你一个长度为 n 的数组 numsnums[i] 表示你可以从下标 i 往后往索引变大的方向跳跃的最大长度你可以向后跳跃任何距离该距离在 0 至 nums[i] 内。返回到达 nums[n-1] 的最小跳跃步数。
题目要求我们求出从位置 0 开始到数组位置 n-1 处跳跃的最小步数。 解题思路
方法一贪心
我们使用贪心的思想进行解答贪心的思想即通过局部最优解得到全局最优解。
我们在每次可以跳跃的步数中选择可以到达最远位置的位置作为起跳点进行跳跃。
例如对于数组 nums [2, 1, 3, 4]我们初始位置从下标 0 开始跳跃可以跳跃到下标 1 和下标 2其中下标 1 的值为 1下标 2 的值为 3因此第一次到达的下标我们选择到达 2。
在具体的实现中我们维护当前能够到达的最大下标位置记为边界 end。我们从左到右遍历数组到达边界时更新边界并将跳跃次数增加 1。
在遍历数组时我们不访问最后一个元素这是因为在访问最后一个元素之前我们的边界一定大于等于最后一个位置否则就无法跳到最后一个位置了。如果访问最后一个元素在边界正好为最后一个位置的情况下我们会增加一次不必要的跳跃次数因此我们不必访问最后一个元素。
以上两端文字出自于 官方题解还需好好体会。
实现代码
class Solution {
public:int jump(vectorint nums) {int maxPos 0, n nums.size(), end 0, step 0;for (int i 0; i n - 1; i) {if (maxPos i) {maxPos max(maxPos, i nums[i]);if (i end) {end maxPos;step;}}}return step;}
};
复杂度分析
时间复杂度 O ( n ) O(n) O(n)。
空间复杂度 O ( 1 ) O(1) O(1)。 写在最后
如果文章内容有任何错误或者您对文章有任何疑问欢迎私信博主或者在评论区指出 。
如果大家有更优的时间、空间复杂度方法欢迎评论区交流。
最后感谢您的阅读如果感到有所收获的话可以给博主点一个 哦。