代码随想录
122.买卖股票的最佳时机II
思路
思路:把所有的正差值加起来
题解思路:局部最优是收集每天的正利润,全局最优是求最大利润。
代码
class Solution {
public int maxProfit(int[] prices) {
if(prices.length==0 || prices.length==1) return 0;
int res = 0;
for(int i =1;i<prices.length;i++){
if(prices[i]>prices[i-1]){
res = res + prices[i] - prices[i-1];
}
}
return res;
}
}
55. 跳跃游戏
思路
题解思路:关键在于记录每次的最大覆盖范围,只要从起点开始的最大覆盖范围达到终点那么就是可以达到终点的.关键在于扩展遍历的终点大小cover!
代码
class Solution {
public boolean canJump(int[] nums) {
if(nums.length ==1) return true;
int cover = 0;
for(int i = 0;i<=cover;i++){
cover = Math.max(cover,i+nums[i]);
if(cover>=nums.length-1) return true;
}
return false;
}
}
45.跳跃游戏II
思路
题解思路:以最小的步数增加覆盖范围!从而获得达到终点的最小跳跃数。
意义在于,如果这一步的最大覆盖范围还没有达到终点,那么就再向前走一步。只要这一步可以覆盖了,那么就是最小跳跃数。
注意这个步数不是每一步都要++,而是每次更新最大覆盖范围需要++
代码
class Solution {
public int jump(int[] nums) {
if(nums.length == 1||nums.length==0) return 0;
int count = 0;
int cover = 0;
int curcover = 0;
for(int i =0;i<=cover;i++){
cover = Math.max(cover,i+nums[i]);
if(cover>=nums.length-1) {
count++;
break;
}
if(curcover == i){
curcover = cover;
count++;
}
}
return count;
}
}