LeetCode面试题Day4|LeetCode55 跳跃游戏|LeetCode45 跳跃游戏Ⅱ
创始人
2024-11-04 09:38:24

题1:

指路:

. - 力扣(LeetCode)55 跳跃游戏

思路与分析:

初始位置在数组的首元素,其中元素值代表在该位置的最大跳跃长度。举个例子,example1中给出的数组为[2, 3, 1, 1, 4],那么在第一个元素“2”处就有往后跳1步和往后跳2步两种情况,而跳1步到元素“3”之后更是有三种跳法,这样统计不同跳法到达的位置繁琐且难掌控。不妨用跳跃后的覆盖范围取代。当最大的覆盖范围大于等于数组尺寸的时候就说明无论怎样跳都能到达数组末尾从而返回true,反之则返回false。而覆盖范围可以用轮数为界,还是以[2, 3, 1, 1, 4]比如第一个元素是2,那么第一轮的最大覆盖范围即为2,同样下一轮的最大覆盖范围是上一轮的覆盖范围与本轮元素与下标和的较大值,也就是max(2, 4),此时结果为4,意为最大可以向后跳4个,此时我们发现已经可以抵达数组的尾元素,结束。

代码:

class Solution { public:     bool canJump(vector& nums) {     int fields = 0;     int n = nums.size();     for (int i = 0; i <= fields; i++) {           // 小于等于fields而不是n是因为控制覆盖范围统一         fields = max(fields, nums[i] + i);         // 求本轮覆盖范围=取上一个覆盖范围和新覆盖范围的较大值         if (fields >= n - 1) return true;     }     return false;     } };

题2:

指路:

. - 力扣(LeetCode)45 跳跃游戏Ⅱ

思路与分析:

本题需要我们返回跳转到数组尾元素的最小跳转次数,注意:这里没有到达不了尾元素的情况。

代码:

class Solution { public:     int jump(vector& nums) {         int fields = 0, n = nums.size();         int end = 0, ans = 0;         for (int i = 0; i < n - 1; i++) {             if (fields >= i) {                 fields = max(fields, nums[i] + i);                 if (i == end) {                     end = fields;                     ans ++;                 }             }         }         return ans;     } };

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...