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

跳跃游戏(力扣55)

题目问是否可以跳到数组最后一个下标,有的同学可能会思考如何模拟跳跃这个操作,但这是比较困难的,很容易把自己绕进去。可以换一种思路,我们不需要知道具体是如何跳到最后一个下标的,而是找到最大的跳跃范围。如果该跳跃范围可以覆盖最后一个下标,就说明我们一定可以通过某种跳跃策略到达最后一个下标。更具体来说,不一定非要明确一次究竟跳几步,而是每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。这个范围内,别管是怎么跳的,反正一定可以跳过来。所谓的贪心也就是体现在:局部最优:每次取最大跳跃步数(取最大覆盖范围);整体最优: 最后得到整体最大覆盖范围,看是否能到终点。为了实现这个想法,代码的书写上还是有一定的技巧性。大家可以结合下面的代码及详细注释理解此题。

代码及详细注释如下:

class Solution {
public:
    bool canJump(vector<int>& nums) {
    //数组长度为1,进行剪枝
      if(nums.size() == 1){
        return true;
      }
      int cover = 0;
      //用cover变量控制for循环的遍历范围
      //每遍历到一个元素,如果该元素的跳跃范围更大,
      //cover 就得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。
      for(int i = 0;i <= cover;i++){
        cover = max(cover,i + nums[i]);
        if(cover >= nums.size() - 1){
            return true;
        }
      }
      return false;
    }
};


 

相关文章:

  • Python爬虫基础文件操作
  • 【OS安装与使用】part6-ubuntu 22.04+CUDA 12.4运行MARL算法(多智能体强化学习)
  • python学习
  • Jenkins整合Jmeter实现接口自动化测试
  • nacos编写瀚高数据库插件
  • 【Linux专栏】rsync 同步文件时自动创建目录
  • VMWare安装Debian操作系统
  • Could not download npm for node v14.21.3(nvm无法下载节点v14.21.3的npm)
  • HTTP 常见状态码技术解析(应用层)
  • Blender小技巧和注意事项
  • 如何在 Linux 内核中实现自定义协议族并使用 Socket 通信
  • c++ std::vector使用笔记
  • 【联盛德 W803-Pico 试用】简介、工程测试
  • 安装可视化jar包部署平台JarManage
  • 【算法系列】leetcode1419 数青蛙 --模拟
  • ROS2下编写package利用orbbec相机进行yolov8实时目标检测
  • iOS端集成人脸识别功能、人证合一、JavaScript接口集成
  • ChatGPT超级AI对话模型 黑客十问十答
  • Hadoop-HA集群部署
  • AI刷题-多零件流水线优化问题
  • 俄外长与美国务卿通电话,讨论俄美接触等问题
  • 贝壳一季度收入增长42%:二手房市场活跃度维持在高位
  • 株洲一重病妇女被要求本人到银行取款时去世?当地警方:正在处理
  • 回望星河深处,唤醒文物记忆——读《发现武王墩》
  • 当番茄霸总遇上晋江古言,短剧IP小变局
  • 上海市国防动员办公室副主任吴斌接受审查调查