持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情🚀🚀
122. 买卖股票的最佳时机 II - 力扣(LeetCode)
代码实现
var maxProfit = function(prices) {
let diff = 0;
let res = 0;
for(let i = 0; i < prices.length ; i++){
diff = prices[i] - prices[i-1];
if(diff > 0 ){
res = diff + res;
}
}
return res
};
这里的思路还是很简单的,只要收集两天之间的正收益就OK了~
55. 跳跃游戏 - 力扣(LeetCode)
代码实现
var canJump = function(nums) {
let cover = 0;
for(let i = 0; i <= cover ; i++ ){
cover = Math.max(cover,i+nums[i]);
if(cover >= nums.length-1)
return true
}
return false;
};
收获
- 寻找最大值,可以直接用函数库Math.max
- 贪心体现在哪?
贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。
45. 跳跃游戏 II - 力扣(LeetCode)
代码实现
var jump = function(nums) {
let curIndex = 0
let nextIndex = 0
let steps = 0
for(let i = 0; i < nums.length - 1; i++) {
nextIndex = Math.max(nums[i] + i, nextIndex)
if(i === curIndex) {
curIndex = nextIndex
steps++
}
}
return steps
};
难点
- 大概思路
- 维护当前能够到达的最大下标位置,记为边界,从左到右遍历数组,到达边界时,更新边界
- 在遍历数组时,不访问最后一个元素,因为终点必到达,如果访问最后一个元素,在边界正好为最后一个位置的情况下,会增加一次不必要的跳跃次数
- 遍历的长度为整个数组,和上一题不一样。
- 最后一次不需要遍历
- 到达边界的时候再递增