代码随想录算法训练营补打卡 day32 |122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

目录

  • 122.买卖股票的最佳时机II
    • 思路
    • 代码
  • 55. 跳跃游戏
    • 思路
    • 代码
  • 45.跳跃游戏II
    • 思路
    • 代码

代码随想录

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;
    }
}


你可能感兴趣的:(算法,游戏,leetcode)