当前位置: 首页 > web >正文

力扣网编程55题:跳跃游戏之逆向思维

一. 简介

前面一篇文章使用贪心算法解决 力扣网55题:跳跃游戏,文章如下:

力扣网编程55题:跳跃游戏之贪心算法-CSDN博客

二. 力扣网编程55题:跳跃游戏之逆向思维

给你一个非负整数数组 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 , 所以永远不可能到达最后一个下标。

逆向思维分析:

采用逆向思维,从终点倒推判断哪些位置可以到达终点。

从最后一个位置开始往前遍历,维护一个变量 last_pos:表示当前能够跳到到终点的最近位置。

如果 index+ nums[index] >= last_pos,就更新 last_pos为当前位置 index(因为index是新的可到达终点的最小下标)。

遍历完数组,最后判断 last_pos是否为0;

解题思路二:(从后往前逆向思维)

1. 定义一个变量last_pos:初始化为numsSize-1,表示当前能够跳到终点的最近位置。

2. 遍历数组,从倒数第二个元素开始,判断当前位置+跳跃的长度(即数组元素值)是否大于等于 last_pos,如果满足,则将last_pos = i(因为 index是新的可到达终点的最小下标);

3. 数组遍历结束,最后判断last_pos是否为0,如果是则说明数组从首元素可以跳跃到终点,否则不行;

C语言实现如下:

//逆向思维
//从数组末尾开始,从后往前遍历
bool canJump(int* nums, int numsSize) {//last_pos表示能到达终点位置的最近位置//初始时,终点位置是可到达的int index;int last_pos = numsSize-1;for(index = numsSize-1; index >= 0, index--) {//关键判断://如果从当前位置index出发,跳跃nums[index]长度的距离能够到达或超过last_pos//说明可以从index位置跳跃到last_pos的位置,进而到达终点//因为更新last_pos为index,因为现在index成为了新的可到达终点的最前位置if((index + nums[index] >= last_pos)) {last_pos = index;}}if(!index){return true;}else{return false;}
}

http://www.xdnf.cn/news/14947.html

相关文章:

  • 【Linux】常用基本指令
  • TinyWebserver学习(9)-HTTP
  • 【Halcon】WPF 自定义Halcon显示控件完整流程与 `OnApplyTemplate` 未触发的根本原因解析!
  • C语言socket编程-补充
  • 面试150 快乐数
  • uniapp启动图被拉伸问题
  • 你若寻,便寻得见 ✨
  • MQTT与HTTP在物联网中的比较:为什么MQTT是更好的选择
  • 大小不足5M,轻量级PDF阅读工具
  • vs code关闭函数形参提示
  • 贪吃蛇游戏设计
  • Linux 内存水位判断机制与实战调优 —— 从卡顿现象到 ftrace 定位全流程
  • AWS WebRTC:通过shell分析viewer端日志文件
  • 结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
  • 力扣 hot100 Day35
  • 模仿学习(Imitation Learning)
  • c++ duiLib环境集成2
  • 使用 DigitalPlat 免费搭配 Cloudflare Tunnel 实现飞牛系统、服务及 SSH 内网穿透教程
  • AIStarter平台使用指南:如何一键卸载已下载的AI项目(最新版操作教程)
  • 【网络与系统安全】强制访问控制——BLP模型
  • latency 对功耗的影响
  • MyDockFinder 绿色便携版 | 一键仿Mac桌面,非常简单
  • Spring Boot + 本地部署大模型实现:安全性与可靠性保障
  • day55-驱动之系统移植II
  • 马尔可夫链:随机过程的记忆法则与演化密码
  • Jenkins 介绍
  • jQuery Mobile 安装使用教程
  • 【MySQL安装-yum/手动安装,卸载,问题排查处理完整文档(linux)】
  • Docker学习笔记:Docker网络
  • 每周资讯 | Krafton斥资750亿日元收购日本动画公司ADK;《崩坏:星穹铁道》新版本首日登顶iOS畅销榜