LeetCode 面试最热100题 跳跃游戏
Posted Linux猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 面试最热100题 跳跃游戏相关的知识,希望对你有一定的参考价值。
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏:点击关注 LeetCode面试必备100题 专栏(优质好文持续更新中……)🚀
目录
一、题目描述
给定一个非负整数数组 nums ,你最初位于数组的第一个下标。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。
约束条件:
- 1 <= nums.length <= 3 * 10^4
- 0 <= nums[i] <= 10^5
二、测试样例
输入:nums = [2,3,1,1,4]
输出:true
说明:初始时位于下标 2 的位置,可以先跳 1 步,从下标 0 到达下标 1(数组中 3 的位置), 然后再从下标 1 跳 3 步到达最后一个下标(数组中 4 的位置)。
三、算法思路
本题是一道典型的「贪心算法」,依次遍历数组中的每一个元素,每到达一个点,记录能跳跃的最大下标距离 idx,在遍历数组过程中,不断更新这个最大距离 idx,如果遍历到数组中的某一个元素,idx 的距离无法到达当前元素的下标(即:idex < i),表示无法继续往下跳跃,否则直到最大距离 idx 大于等于 n-1 为止(idx >= n - 1 表示可以跳跃到最后的小标 n-1 处)。
四、代码实现
#include <iostream>
#include <vector>
using namespace std;
class Solution
public:
bool canJump(vector<int>& nums)
int idx = 0;
for(int i = 0; i < nums.size() && idx < nums.size(); ++i)
if(idx >= i)
idx = max(nums[i] + i, idx);
else
return false;
return true;
;
int main()
int a[] = 2,3,1,1,4;
vector<int>nums(a, a+5);
Solution obj;
cout<<obj.canJump(nums)<<endl;
return 0;
五、复杂度分析
5.1 时间复杂度
时间复杂度:O(n),在上述算法中,只遍历了一次数组(数组个数为 n),故算法时间复杂度为 O(n)。
5.2 空间复杂度
空间复杂度:O(1),在上述算法中,仅适用到了 idx 一个变量,可以忽略,故空间复杂度为 O(1)。
六、题目链接
七、总结
本题考查的是贪心算法的应用,只需要遍历一次即可。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
以上是关于LeetCode 面试最热100题 跳跃游戏的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 最热 100 题, 搜索旋转排序数组,search in rotated sorted array
LeetCode-100题(Hot) 45. 跳跃游戏 II [Java实现] [极速]
LeetCode 最热 100 题,电话号码的字母组合,letter combinations of a phone number