122.买卖股票的最佳时机Ⅱ
题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/
var maxProfit = function(prices) {
// 用来存放利润为正数的值
let result=0
for(let i=1;i<prices.length;i++){
result+=Math.max(prices[i]-prices[i-1],0)
}
return result
};
解题思路:
1.要想返回最大利润尽量保持每天的利润为正数才得以取得最大利润
2.本题很巧妙的一点是定义一个变量result来存放利润为正数的值,然后遍历所给数组,在利润和0之间取最大数巧妙的化解了去掉负数的情况。
55.跳跃游戏
题目链接:https://leetcode.cn/problems/jump-game/
var canJump = function(nums) {
// 缺点覆盖范围的下标,从0开始
let cover=0
if(nums.length===1) return true
for(let i=0;i<=cover;i++){
cover=Math.max(i+nums[i],cover)
if(cover>=nums.length-1) return true
}
return false
};
解题思路:
1.本题只看覆盖范围即可,若最大覆盖范围无法达到最后一个数字的下标,那么返回false,从下标0开始,覆盖范围的值为数字所在的下标加上当前这个数字即可得到覆盖范围的下标,也就是覆盖范围所到达的地方。
2.因为本题只看是否能够到达最后一个下标,也不用看是谁,只需要考虑覆盖范围即可。
45.跳跃游戏Ⅱ
题目链接:https://leetcode.cn/problems/jump-game-ii/
var jump = function(nums) {
if(nums.length===1) return 0
// 当前覆盖范围
let curIndex=0
// 下一个覆盖范围
let nextIndex=0
let step=0
for(let i =0;i<nums.length;i++){
nextIndex=Math.max(i+nums[i],nextIndex)
if(i===curIndex){
if(curIndex!==nums.length-1){
curIndex=nextIndex
step++
}
if(curIndex>=nums.length-1) break
}
}
return step
};
解题思路:
1.本题和上一题的差别在于,本题要统计出跳到最后一个数字最小跳跃次数,引入了三个变量来统计。
2.有一点需要注意的是如何确定走的步数是最小,将走的步数存起来,然后和下一个数走的步数比较取最大值,就可以解决此问题啦。