每日OJ题_贪心算法三③_力扣45. 跳跃游戏 II(dp解法+贪心解法)

devtools/2024/10/18 16:50:48/

目录

力扣45. 跳跃游戏 II

解析代码1_动态规划

解析代码2_贪心


力扣45. 跳跃游戏 II

45. 跳跃游戏 II

难度 中等

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i] 
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

提示:

  • 1 <= nums.length <= 10^4
  • 0 <= nums[i] <= 1000
  • 题目保证可以到达 nums[n-1]
class Solution {
public:int jump(vector<int>& nums) {}
};

解析代码1_动态规划

动态规划解法:(时间是O(N^2),刚好能AC,下面的贪心解法是O(N))

状态表示:dp[i] 表⽰从 0 位置开始,到达 i 位置时候的最小跳跃次数

状态转移方程:对于 dp[i] ,遍历 0 ~ i - 1 区间(用指针 j 表示),只要能够从 j 位置跳到 i 位置( nums[j] + j >= i ),就用 dp[j] + 1 更新 dp[i] 里面的值,找到所有情况下的最小值即可。

class Solution {
public:int jump(vector<int>& nums) {int n = nums.size();vector<int> dp(n, INT_MAX);dp[0] = 0;for(int i = 1; i < n; ++i){for(int j = 0; j < i; ++j){if(nums[j] + j >= i) {dp[i] = dp[j] + 1;break;}}}return dp[n -1];}
};


解析代码2_贪心

        用类似层序遍历的过程,将第 i 次跳跃的起始位置和结束位置找出来,用这次跳跃的情况,更新出下一次跳跃的起始位置和结束位置。这样循环往复,就能更新出到达 n - 1 位置的最小跳跃步数。时间复杂度是O(N)。

class Solution {
public:int jump(vector<int>& nums) {int left = 0, right = 0, maxPos = 0, ret = 0, n = nums.size();// 这一次起跳的左端点,右端点,下一次起跳的右端点while(left <= right){if(maxPos >= n - 1)return ret;for(int i = left; i <= right; ++i){maxPos = max(maxPos, i + nums[i]);}left = right + 1; // 更新起跳左右端点并++retright = maxPos;++ret;}return -1; // 不会走到这}
};


http://www.ppmy.cn/devtools/36362.html

相关文章

Autodesk AutoCAD 2025 for Mac:强大的二维三维绘图工具

Autodesk AutoCAD 2025 for Mac是一款专为Mac用户打造的计算机辅助设计软件&#xff0c;它在继承了AutoCAD系列软件的优秀传统的基础上&#xff0c;针对Mac系统进行了全面优化&#xff0c;为用户提供了更出色的绘图和设计体验。 这款软件不仅支持用户创建和编辑复杂的二维几何图…

充电宝买哪个牌子?四款性能超强充电宝牌子推荐!速来码住!

在快节奏的现代生活中&#xff0c;手机已经成为了我们最亲密的伙伴。无论是工作、学习还是娱乐&#xff0c;手机都扮演着至关重要的角色。然而&#xff0c;手机电量的问题总是让人头疼。特别是在外出旅行时&#xff0c;手机电量耗尽更是让人倍感焦虑。为了解决这个问题&#xf…

Spring IoCDI(3)—DI详解

目录 一、属性注入 二、构造方法注入 小结&#xff1a;构造函数的注入 三、Setter注入 四、三种注入的优缺点分析&#xff08;面试题&#xff09; 1、属性注入 优点&#xff1a; 缺点&#xff1a; 2、构造方法注入&#xff08;Spring4.X推荐&#xff09; 优点&#x…

【代码随想录——哈希表】

1.哈希表理论基础 首先什么是 哈希表&#xff0c;哈希表&#xff08;英文名字为Hash table&#xff0c;国内也有一些算法书籍翻译为散列表&#xff0c;大家看到这两个名称知道都是指hash table就可以了&#xff09;。 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用…

IIoT:数据融合在工业物联网中的应用——青创智通

工业物联网解决方案-工业IOT-青创智通 随着科技的不断发展&#xff0c;工业物联网&#xff08;IIoT&#xff09;已经逐渐渗透到各个行业&#xff0c;为企业的生产和管理带来了前所未有的便利。 然而&#xff0c;与此同时&#xff0c;海量的数据也为企业带来了挑战。如何将这些…

暗区突围联机不了联机失败无法联机的极速解决方法

暗区突围联机不了/联机失败/无法联机的极速解决方法 《暗区突围》是由腾讯魔方工作室群开发的第一人称射击类手游&#xff0c;于2021年8月17日进行先锋测试&#xff0c;并在2022年7月13日正式公测。《暗区突围》提供了双模式玩法&#xff0c;包括战术行动和伪装潜入&#…

C# Solidworks二次开发:枚举应用实战(第十三讲)

大家好&#xff0c;今天继续介绍我们的枚举应用系列。 下面是今天要介绍的枚举&#xff1a; &#xff08;1&#xff09;第一个为swsUserPreferenceIntegerValue_e&#xff0c;这个枚举的含义为用户偏好整数值&#xff0c;下面是官方的具体枚举值&#xff1a; MemberDescript…

R语言计算特定列的和(自备)

R语言长款数据转换&#xff08;自备&#xff09;_r语言宽数据转换成长数据-CSDN博客 数据 rm(list ls()) library(ggplot2) library(ggpubr) library(cowplot) data <- iris##鸢尾花数据集 #[1] "Sepal.Length" "Sepal.Width" "Petal.Length&…