贪心——跳跃游戏 II(Leetcode 45)
题目选自
Leetcode 45. 跳跃游戏 ||
与跳跃游戏 | 的不同之处在于,我们需要求的是最少的跳跃次数~
题目描述:
解题思路:
思想
就一句话:每次在上次能跳到的范围(end)内选择一个能跳的最远的位置(也就是能跳到max_far位置的点)作为下次的起跳点 !
详解:
规的思维就是暴力穷举,把所有可行的跳跃方案都穷举出来,计算步数最少的。穷举的过程会有重叠子问题,用备忘录消除一下,就成了自顶向下的动态规划。
不过直观地想一想,似乎不需要穷举所有方案,只需要判断哪一个选择最具有「潜力」即可,这就是贪心思想来做,比动态规划效率更高。
比如上图这种情况,我们站在索引 0 的位置,可以向前跳 1,2 或 3 步,你说应该选择跳多少呢?
显然应该跳 2 步调到索引 2,因为
nums[2]
的可跳跃区域涵盖了索引区间[3..6]
,比其他的都大。这就是思路,我们用
i
和end
标记了可以选择的跳跃步数,farthest
标记了所有选择[i..end]
中能够跳到的最远距离,jumps
记录跳跃次数。看不懂? 再来详解:
解题代码:
int jump(int* nums, int numsSize){if(numsSize == 1) return 0;int end = 0 , farthest = 0;int jumps = 0;for(int i = 0; i < numsSize - 1; i++){farthest = fmax(nums[i] + i , farthest); //记录当前能到达的最远距离if(end == i){jumps++;end = farthest; //模拟每次能跳到的最远距离,然后“跳到”最远距离上,这时步数+1//当end == i 时表示,上一次跳jumps次已经到最大距离了,之后的距离肯定得+1}}return jumps;
}
贪心——跳跃游戏 II(Leetcode 45)相关推荐
- LeetCode 45.跳跃游戏II
45.跳跃游戏 II 题目描述 给你一个非负整数数组 nums ,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. ...
- leetcode 45.跳跃游戏 II
一.题意 给出一个非负整数数组 nums ,数组中的每个元素代表在该位置可以跳跃的最大长度.使用最少的跳跃次数到达数组的最后一个位置.假设总是可以到达数组的最后一个位置. 二.解法 贪心算法. 解法一 ...
- _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II
_28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...
- 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
LeetCode 122.买卖股票的最佳时机II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票 ...
- [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]
[问题描述][Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2.从下标为 0 跳到下标为 1 的位置 ...
- Leetcode 45. 跳跃游戏 II
Leetcode 45. 跳跃游戏 II 题目 给你一个非负整数数组 nums ,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组 ...
- leetcode 45. 跳跃游戏 II 46. 全排列
leetcode 45. 跳跃游戏 II 46. 全排列 45. 跳跃游戏 II 难度中等1273收藏分享切换为英文接收动态反馈 给你一个非负整数数组 nums ,你最初位于数组的第一个位置. 数组中 ...
- 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间
本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...
- leetcode 45跳跃游戏II
跳跃游戏II 核心思想:当前范围内走不到目的地,更新下一个范围.下一个范围是当前范围内能走到的最远点 class Solution {public:int jump(vector<int> ...
最新文章
- 安全测试之XSS攻击
- 陈一舟:雷军马云在通讯领域也做不过马化腾 为何我就该挨骂
- 暑假集训考试反思+其它乱写
- linux与虚拟化实验室,Linux·学习笔记(2)虚拟化与仿真
- python书籍_Python书籍大汇总——入门到实战
- php上传文件测试代码,php 文件上传函数的超详细示例
- 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。...
- pytorch入门_PyTorch入门
- 第二次作业:硬币游戏——代码分析与改进
- 数据分析学习记录(二)---响应曲面法及Design-Expert的简单使用
- java借助Acrobat实现pdf转word
- 树突状细胞(DC细胞)特征及应用进展综述
- Web自动化测试(Selenium自动化测试框架)
- 私钥,公钥的区分——私钥公钥讲解
- OpenCV安装及其开发环境配置(C++)
- Visual Studio创建C语言编程环境
- 北京奥运会Dashboard.Widgets
- 《无间道》中的“盲签字”
- php 抓取京东搜索页,京东商品列表页爬虫采集方法 - 八爪鱼采集器
- Linux系统引导过程(BIOS和Bootloader部分)