【随想录】Day32—第八章 贪心算法 part02

目录

  • [题目1: 买卖股票的最佳时机 II](#题目1: 买卖股票的最佳时机 II)
    • [1- 思路](#1- 思路)
    • [2- 题解](#2- 题解)
      • [⭐买卖股票的最佳时机 II ------题解思路](#⭐买卖股票的最佳时机 II ——题解思路)
  • [题目2: 55. 跳跃游戏](#题目2: 55. 跳跃游戏)
    • [1- 思路](#1- 思路)
    • [2- 题解](#2- 题解)
      • [⭐跳跃游戏 ------题解思路](#⭐跳跃游戏 ——题解思路)
  • [题目3: 45. 跳跃游戏 II](#题目3: 45. 跳跃游戏 II)
    • [1- 思路](#1- 思路)
    • [2- 题解](#2- 题解)
      • [⭐跳跃游戏 II ------题解思路](#⭐跳跃游戏 II ——题解思路)

题目1: 买卖股票的最佳时机 II


1- 思路

贪心:

  • 求数组中相邻两个元素的差值,例如数组 [ 1, 5 , 3 ]
  • 如果是第一天买如,第三天卖出,相当于 p[2] - p[0] = p[2] - p[1] + p[1] - p[0]
  • 贪心思路 :实际上就是求相邻两个元素的差值和,若差值大于 0 则收集结果,为利润,本题贪心即 求 所有正数差值和

2- 题解

⭐买卖股票的最佳时机 II ------题解思路

java 复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int[] sub = new int[prices.length-1];
        int index = 0;
        int res = 0;
        for(int i = 1 ; i < prices.length;i++){
            sub[index++] = prices[i] - prices[i-1];
        }
        for(int i = 0 ; i < sub.length;i++){
            if(sub[i]>0){
                res+=sub[i];
            }
        }
        return res;
    }
}

题目2: 55. 跳跃游戏


1- 思路

贪心

  • 定义一个 int cover变量,代表数组的覆盖范围
  • 通过覆盖范围来遍历数组,每次更新 cover = cover + nums[i],同时覆盖范围取 范围内最大值
  • 贪心思路 :遍历 cover 范围内的数组,每次根据 当前数组的 nums 值,取当前范围最大的可到达数 为当前 cover
    • 如果 cover 超出 数组长度 直接返回 true
    • 否则返回 false

2- 题解

⭐跳跃游戏 ------题解思路

java 复制代码
class Solution {
    public boolean canJump(int[] nums) {
        int cover = 0;
        for(int i = 0 ; i<=cover ;i++){
            cover = Math.max(i+nums[i],cover);
            if(cover >= nums.length-1){
                return true;
            }
        }

        return false;
    }
}

题目3: 45. 跳跃游戏 II


1- 思路

  • 区分于 跳跃游戏的区别在于,并非每次是跳的最大次数就最少

贪心

  • **贪心思路:**以最少的步数,尽可能多的增加覆盖范围 cover ,区别于跳跃游戏基础版的点在于,再定义一个 nextCover,记录每次遍历到的最大范围,但每次不一定更新 cover
    • 只有在当前 cover 走不下去时候,再更新 cover,对结果进行 ++

2- 题解

⭐跳跃游戏 II ------题解思路

java 复制代码
class Solution {
    public int jump(int[] nums) {
        int cover = 0;
        int nextCover = 0;
        int res = 0;
        for(int i = 0 ; i < nums.length;i++){
            nextCover = Math.max(nums[i]+i,nextCover);
            if(i==cover){
                if(cover!=nums.length-1){
                    res++;
                    cover = nextCover;
                }
            }
        }
        return res;
    }
}

相关推荐
weixin_499771554 分钟前
C++中的组合模式
开发语言·c++·算法
iAkuya35 分钟前
(leetcode)力扣100 62N皇后问题 (普通回溯(使用set存储),位运算回溯)
算法·leetcode·职场和发展
近津薪荼36 分钟前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck37 分钟前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
松☆41 分钟前
CANN与大模型推理:在边缘端高效运行7B参数语言模型的实践指南
人工智能·算法·语言模型
java干货1 小时前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法
皮皮哎哟1 小时前
数据结构:嵌入式常用排序与查找算法精讲
数据结构·算法·排序算法·二分查找·快速排序
程序员清洒1 小时前
CANN模型剪枝:从敏感度感知到硬件稀疏加速的全链路压缩实战
算法·机器学习·剪枝
vortex51 小时前
几种 dump hash 方式对比分析
算法·哈希算法
Wei&Yan2 小时前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code