题目
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。
示例 1:
输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
示例 2:
输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
提示:
1 <= nums.length <= 1040 <= nums[i] <= 105方法一:深搜
我们遍历到一个节点分别以n,n-1,……,1步往前走,碰到0就结束分支。如果有分支走到最后一个节点说明走到了,输出yes。所有分支都结束了但没有分支到最后一个节点,输出no。
- #include
- using namespace std;
- bool flag=false;
- int find(int a[],int n,int x){
- for(int i=0;i
- if(a[i]==x){
- return 1;
- }
- }
- return 0;
- }
- int dfs(int a[],int x,int n){
- if(a[x]==0){
- return 0;
- }
- if(x==n-1){
- flag=true;
- return 0;
- }
- for(int i=a[x];i>=1;i--){
- dfs(a,x+i,n);
- }
-
- }
- int main(){
- freopen("jump.in","r",stdin);
- freopen("jump.out","w",stdout);
- int a[10000];
- int n,p=0;
- cin>>n;
- for(int i=0;i
- cin>>a[i];
- }
- if(!find(a,n,0)){
- cout<<"yes";
- return 0;
- }
- dfs(a,0,n);
- if(flag==true){
- cout<<"yes";
- }else{
- cout<<"no";
- }
- return 0;
- }
方法二:贪心
- #include
- using namespace std;
- int main(){
- int n,a[100],step=0;
- cin>>n;
- for(int i=0;i
- cin>>a[i];
- }
- for(int i=0;i<=step;i++){
- step=max(a[i]+i,step);
- if(step>=n){
- cout<<"yes";
- break;
- }else{
- cout<<"no";
- break;
- }
- }
- return 0;
- }
-
相关阅读:
C与汇编深入分析
基线核查--渗透
2024.4.19作业
数据在内存中的存储——练习3
一口气说出 Synchronized 同步方法的八种使用场景
Serialiable接口和serialVersionUID的作用及其在redisson中的应用
MongoDB环境配置-尚硅谷大数据培训
问题解决:使用VISIO导出为PDF,在Latex中有白色边框以及黑色线框的问题
关于C# HttpClient 的用法及相关问题的解决方法
互联网是如何运作的?--互联网解释
-
原文地址:https://blog.csdn.net/wangchuha/article/details/136141589
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU