122.买卖股票的最佳时机II
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(nums) {
let count = 0;
let i = 1;
while (i <= nums.length) {
if ((nums[i] - nums[i - 1]) > 0)
count+=(nums[i] - nums[i - 1]);
i++
}
return count ;
};
第一想法
加上两数相差的正数就好了
55. 跳跃游戏
/**
* @param {number[]} nums
* @return {boolean}
*/
var canJump = function(nums) {
cover = 0
let i=0
while(i<=cover){
cover=cover>i+nums[i]?cover:i+nums[i]
i++
if(cover>=nums.length-1)
return true
}
return false
};
思想
其实跳几步无所谓,关键在于可跳的覆盖范围!
不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。
这个范围内,别管是怎么跳的,反正一定可以跳过来。
那么这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!
每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围。
贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。
45.跳跃游戏II
/**
* @param {number[]} nums
* @return {number}
*/
var jump = function(nums) {
if (nums.length=== 1) return 0;
let cover = 0
let ncover=0
let i=0
let count=0
while(i<=nums.length){
ncover=ncover>i+nums[i]?ncover:i+nums[i] //更新
if(i===cover){ //i走完当前覆盖
count++
cover=ncover
if(ncover>=nums.length-1)
break
}
i++
}
return count
};
思路
还是覆盖思路,不过一个覆盖就是一步,这个覆盖没有走完,那么这个覆盖就是i的长度,然后算ncover。如果ncover走完了,就return。