力扣算法学习day23-2

文章目录

  • 力扣算法学习day23-2
    • 122-买卖股票的最佳时机 II
      • 题目
      • 代码实现
    • 55-跳跃游戏
      • 题目
      • 代码实现

力扣算法学习day23-2

122-买卖股票的最佳时机 II

题目

力扣算法学习day23-2_第1张图片

力扣算法学习day23-2_第2张图片

代码实现

class Solution {
    public int maxProfit(int[] prices) {
        // 局部最优-->总体最优,局部后一天有赚则买,然后第二天卖。总体则最大利润。0ms
        int[] change = new int[prices.length];
        int sum = 0;

        for(int i = 1;i < prices.length;i++){
            change[i] = prices[i] - prices[i-1];
        }

        for(int i = 1;i < change.length;i++){
            if(change[i] > 0){
                sum += change[i];
            }
        }

        return sum;
    }
}

55-跳跃游戏

题目

力扣算法学习day23-2_第3张图片

代码实现

class Solution {
    // 直接想到的方法,速度很慢,主要是想复杂了点。 321ms
    // public boolean canJump(int[] nums) {
    //     // 贪心,局部最优,扫描每个坐标,将其能走到的位置设置+1,故走不到
    //     // 的位置会是0,开头除外,开头需要额外处理。
    //     int[] maybeCollection = new int[nums.length];

    //     for(int i = 0;i < nums.length;i++){
    //         if(i > 0 && maybeCollection[i] == 0){
    //             return false;
    //         }
    //         int value = nums[i];
    //         int index = i+1;
    //         while(value > 0 && index < nums.length){
    //             maybeCollection[index]++;
    //             index++;
    //             value--;
    //         }
    //     }

    //     return true;
    // }

    // 正确贪心,每次到最远距离,看是否能覆盖到终点。 速度 2ms
    public boolean canJump(int[] nums) {
        int scope = 0;// 覆盖范围

        for(int i = 0;i <= scope;i++){
            scope = Math.max(i+nums[i],scope);
            if(scope >= nums.length-1){
                return true;
            }
        }

        return false;
    }
}

你可能感兴趣的:(算法刷题,算法,leetcode,贪心算法)