本文主要是介绍代码随想录算法训练营第三十二天| LeetCode122.买卖股票的最佳时机II、LeetCode55.跳跃游戏、LeetCode45.跳跃游戏II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
LeetCode 122 买卖股票的最佳时机II
题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)
【解题思路】
利润=当天成交价-昨天成交价
当遇到利润为正数的情况,将其收集。
【解题步骤】
-
1.定义一个result,将每天的正利润累加
-
2.循环遍历数组(注意!i从1开始,因为需要从第二天开始减去第一天的价格才能得出利润):
-
如果当天利润为正数,累加到result数组里
-
-
4.return result
【代码部分】
class Solution {public int maxProfit(int[] prices) {int result = 0;for(int i = 1; i < prices.length ; i++){result+=Math.max(prices[i] - prices[i-1],0);}return result;}
}
LeetCode 55 跳跃游戏
题目链接:55. 跳跃游戏 - 力扣(LeetCode)
【解题思路】
不要纠结于能往后跳多少步,只思考当前位置的覆盖范围,只要在覆盖范围内的元素我们在当前位置都能跳到。
如果范围内的元素包含最后一个元素,则返回true,否则返回false。
【解题步骤】
-
1.定义一个cover,用来确认覆盖范围
-
2.如果数组里就一个元素,那么就一定可以跳跃到的,return true
-
4.循环遍历数组(i的终止条件是小于等于cover,因为我们只能在覆盖范围内移动)
-
在已有的覆盖范围内取最大的覆盖范围+赋值给cover
-
如果覆盖范围覆盖到终点,则return true
-
-
5.如果遍历结束还没走到true,就return false
【代码部分】
class Solution {public boolean canJump(int[] nums) {int cover =0;if(nums.length == 1)return true;for(int i = 0; i <= cover ; i++){cover = Math.max(nums[i] + i,cover);if(cover>=nums.length- 1)return true;}return false;}
}
LeetCode 45 跳跃游戏II
题目链接:45. 跳跃游戏 II - 力扣(LeetCode)
【解题思路】
原理同上,不过每一步我们需要尽可能的增加我们的覆盖范围
【解题步骤】
-
1.定义一个cover,用来确认覆盖范围
-
2.定义一个next,用来确认下一步的覆盖范围
-
3.定义一个result记录我们一共跳了几步
-
3.遍历数组:
-
用next记录这一步走完后下一步的覆盖范围(只记录在当前覆盖范围内覆盖范围最大的元素)
-
如果i走到了当前覆盖的终点,并且当前终点不是数组的终点位置:
-
需要启动下一步的覆盖范围,result++
-
将next赋给cover,启动下一步
-
如果当前的覆盖范围已经覆盖到终点,立刻break
-
-
如果当前覆盖范围已经到达了终点,立即break
-
-
4.return result
【代码部分】
class Solution {public int jump(int[] nums) {if(nums == null || nums.length == 0 || nums.length == 1){return 0;}int result = 0;int cover = 0;int next = 0;for(int i = 0; i < nums.length ; i++){next = Math.max(nums[i]+i,next);if(i == cover){if(i < nums.length - 1){result ++;cover = next;if(cover >= nums.length - 1){break;}}else{break;}}}return result;}
}
这篇关于代码随想录算法训练营第三十二天| LeetCode122.买卖股票的最佳时机II、LeetCode55.跳跃游戏、LeetCode45.跳跃游戏II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!