122.买卖股票的最佳时机II
- 刷题https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/
- 文章讲解https://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAII.html
- 视频讲解https://www.bilibili.com/video/BV1ev4y1C7na/?vd_source=af4853e80f89e28094a5fe1e220d9062
-
题解:
class Solution {//收益、贪心思想public int maxProfit(int[] prices) {//记录最大收益int result = 0;//因为收益只能从第二天卖出与第一天买入中做减法得到,所以从第二天开始遍历for(int i = 1; i < prices.length; i++){//遵循正收益思想,用第二天卖出减去第一天买入得到两天的净收益//运用贪心收益思维,当遇见负收益时就跳过,用0累加//即若当天卖出只能得到负收益,则不卖出result += Math.max(prices[i] - prices[i - 1], 0);}return result;}
}
55. 跳跃游戏
- 刷题https://leetcode.cn/problems/jump-game/description/
- 文章讲解https://programmercarl.com/0055.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8F.html
- 视频讲解https://www.bilibili.com/video/BV1VG4y1X7kB/?vd_source=af4853e80f89e28094a5fe1e220d9062
-
题解:
class Solution {//以覆盖范围为基础进行算法推进//当不断更新的覆盖范围达到了结尾,则说明可以完成这个跳跃游戏public boolean canJump(int[] nums) {//当数组元素只有一个时,本身肯定能跳到本身,所以返回trueif(nums.length == 1){return true;}//初始覆盖范围为0int coverRange = 0;//在覆盖范围内更新并记录最大的覆盖范围for(int i = 0; i <= coverRange; i++){coverRange = Math.max(coverRange, i + nums[i]);if(coverRange >= nums.length - 1){return true;}}//若在循环内未走到覆盖到结尾的逻辑,则说明无法跳到结尾,返回falsereturn false;}
}
45.跳跃游戏II
- 刷题https://leetcode.cn/problems/jump-game-ii/description/
- 文章讲解https://programmercarl.com/0045.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8FII.html
- 视频讲解https://www.bilibili.com/video/BV1Y24y1r7XZ/?vd_source=af4853e80f89e28094a5fe1e220d9062
-
题解:
class Solution {public int jump(int[] nums) {//当只有一个元素,可直接返回0,即不需要任何步数就可以完成游戏if(nums.length == 1){return 0;}//记录当前覆盖的最远距离下标,和下一步覆盖的最远距离元素的下标,初始化为0//让二者以双指针形式进行推进//debug点:要深刻理解下一步覆盖距离的意义及作用int curDistance = 0;int nextDistance = 0;//记录移动的最小跳跃次数,初始化为0int result = 0;//遍历下标for(int i = 0; i < nums.length - 1; i++){//nextDistance为上一级覆盖范围内的元素,其最大的覆盖范围,//作为下一级元素,更新下一级覆盖的最远距离的下标nextDistance = Math.max(nums[i] + i, nextDistance);//当i走到了当前覆盖的最远距离元素的下标的位置//则需要向后推进一位,继承之前的最大范围,启动下一步覆盖范围,//即:遍历完上一个覆盖范围后,更新当前最大覆盖范围,并增加步数if(i == curDistance){curDistance = nextDistance;result++;}}return result;}
}