备战秋招60天算法挑战,Day26

server/2024/11/14 2:43:22/

题目链接: https://leetcode.cn/problems/jump-game/

视频题解: https://www.bilibili.com/video/BV1gwYKekEVN/

LeetCode 55. 跳跃游戏

题目描述

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

举个例子:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

视频题解

跳跃游戏

思路来源

思路来源

知识回顾

贪心算法是一种常见的算法思想,它通常用于解决优化问题。贪心算法的基本思想是,在每一步选择中都采取当前状态下最优的选择,从而希望最终得到全局最优解。

思路解析

本题是一道贪心算法应用的经典问题。应用贪心算法的关键就是每一步都采取当前状态下的最优选择

本题的算法如下:

  1. 逆序遍历numstarget=nums.size()
  2. 遍历到索引i,跳nums[i]步,i + nums[i] >= target说明子目标可达,此时更新target = i
  3. 最终target == 0说明总目标可达。

上述步骤把总目标拆解成一个个子目标,为达成每个子目标都采取当下能跳的最大长度,这就很符合贪心的每一步都采取当前状态下的最优选择这个原则。

C++代码

class Solution {
public:bool canJump(vector<int>& nums) {int nums_len = nums.size();//初始化目标值int target = nums_len - 1;for (int i = nums_len - 1; i >=0; --i) {//当前目标可达,更新目标if (i + nums[i] >= target) {target = i;}}if (target == 0) {return true;}return false;}
};

java_68">java代码

java">class Solution {public boolean canJump(int[] nums) {int nums_len = nums.length;// 初始化目标值int target = nums_len - 1;for (int i = nums_len - 1; i >= 0; --i) {// 当前目标可达,更新目标if (i + nums[i] >= target) {target = i;}}if (target == 0) {return true;}return false;}
}

python_91">python代码

python">class Solution:def canJump(self, nums: List[int]) -> bool:nums_len = len(nums)# 初始化目标值target = nums_len - 1for i in range(nums_len - 1, -1, -1):# 当前目标可达,更新目标if i + nums[i] >= target:target = iif target == 0:return Truereturn False

复杂度分析

时间复杂度: O(n)nnums的长度。

空间复杂度: O(1)


http://www.ppmy.cn/server/108368.html

相关文章

python基础学习(最终篇)

文章目录 JSON的基础使用一. JSON简介二. JSON语法规则三. JSON数据类型四. JSON对象五. JSON数组六. JSON函数1. json.dumps2. json.loads3. json.dump4. json.load5. encode6. decode7. 参数说明 总结 JSON的基础使用 一. JSON简介 JSON(JavaScript Object Notation) 是一种…

比特币牛市将至背后

作者&#xff1a;Arthur Hayes 编译&#xff1a;Liam 「此处所表达的任何观点均为作者个人意见&#xff0c;不应作为投资决策依据&#xff0c;也不应被视为参与投资交易的推荐或建议。」 我打破常规&#xff0c;前往南半球滑雪两周&#xff0c;为北半球的暑假画上圆满的句号。我…

模拟登录页,华为账号一键登录

一、介绍 基于鸿蒙Next模拟账号一键登录&#xff0c;免去账号注册环节二、场景需求 1. 用户场景 新用户&#xff1a; 需要快速注册并登录&#xff0c;以体验华为的服务。 老用户&#xff1a; 希望快速登录&#xff0c;不用每次输入用户名和密码。 2. 界面设计 Logo和标题&#…

【kubernetes】kubernetes Deployment 详解

Deployment 详解 kubernetes Deployment 详解更新/回滚/缩放/暂停/恢复部署操作 发布策略1、在zs命名空间下创建3个httpd副本并查看结果2、尝试删除其中一个副本并查看结果3、删除所有副本并查看结果4、使用k8s做金丝雀发布测试 kubernetes Deployment 详解 更新/回滚/缩放/暂…

C# opencv识别二维码

新建桌面程序 安装opencvsharp 拖拽设计页面 选择图片识别代码 using OpenCvSharp; using System.Text;namespace QRcodeIdentity {public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 选择图片/// </summary>/// <pa…

物联网安全框架:构建安全互联的未来世界

在数字化浪潮的推动下&#xff0c;物联网&#xff08;IoT&#xff09;技术已经深入我们生活的方方面面&#xff0c;从智能家居到工业自动化&#xff0c;从医疗健康到智能交通&#xff0c;物联网的触角无处不在。然而&#xff0c;随着物联网设备的爆炸式增长&#xff0c;其安全问…

数据结构-符号表

1.概述 符号表最主要的目的就是将一个键和一个值联系起来&#xff0c;符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据&#xff0c;我们可以根据键来查找对应的值。 符号表中&#xff0c;键具有唯一性,符号表在实际生活中的使用场景是非常广泛的&#xff0c;见…

数据结构——树

文章目录 二叉树和**BST**树与二叉树基本概念常见例子相关术语二叉树 二叉搜索树&#xff08;**BST**&#xff09;二叉树&#xff08;**BST**&#xff09;的算法二叉树&#xff08;**BST**&#xff09;完整实现 二叉树和BST 树与二叉树 基本概念 树是一种非线性结构&#xf…