每日一题-贪心算法

目录

前言

买入股票的最佳时机(1)

买入股票的最好时机(2)

前言

当你踏上贪心算法的旅程,仿佛置身于一场智慧的盛宴,每一步都是对问题解决方案的审慎选择,每一次决策都是对最优解的向往。贪心算法以其简洁高效的特性,被广泛运用于解决各类优化问题,无论是在算法竞赛的舞台上,还是在实际工程的应用中,都展现着其独特的魅力。

在这篇博客中,我将带领大家深入探索贪心算法的精髓,从经典问题到实际案例,一一呈现其妙不可言喻之处。透过习题讲解,我们将一同揭开贪心算法的神秘面纱,探寻其中的逻辑与技巧,希望能够为各位读者提供一份清晰的指南,助力你们在算法的海洋中航行无忧。

无论是初学者抑或是算法高手,都能从中收获不少启发与收获。让我们一起启程,探索贪心算法的奥秘,开启算法之旅的新篇章!

买入股票的最佳时机(1)

. - 力扣(LeetCode)

我们可以按照以卖的点的位置进行思考,以 i 位置进行出售,就只需要求 0 ~ i - 1 位置内买入的最小值即可,然后把每个位置的最大值求出来,即可通过O(n)的复杂度解决这道问题。

代码实现,我把上面的思路分析都用代码注释标注了

java 复制代码
class Solution {
    public int maxProfit(int[] arr) {
        int min = Integer.MAX_VALUE;// 记录i - 1位置的最小值
        int max = Integer.MIN_VALUE;// 卖出股票会得到的最大利润

        for (int i = 0; i < arr.length - 1; i++) {
            min = Math.min(min, arr[i]);// 计算前面的最小值
            max = Math.max(max, arr[i + 1] - min);// 更新最大值
        }
        return Math.max(max, 0);
    }
}

买入股票的最好时机(2)

. - 力扣(LeetCode)

贪心算法的思想是在每一步都选择当前状态下的最优解,以期望最终获得全局的最优解。对于这个问题,我们可以通过找到股票价格的递增区间,并在每个递增区间内进行买入和卖出操作,以获得最大利润。

这一题的解决方案就和下图一样画出增长区间,求出所有增长区间的值之和,也就是最终答案。

  1. 遍历股票价格数组,从第二天开始。
  2. 如果当前股票价格比前一天高,说明可以在前一天买入,当前天卖出,获得利润。
  3. 将每次获得的利润累加起来,得到最终的总利润。
java 复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int result = 0;
        for(int i = 1;i < prices.length;i++){//从第二个位置开始
            if(prices[i] > prices[i - 1]){
//通过求每一段增长区间的值来求最终增长区间的值(每个增长区间我都要)
                result += prices[i] - prices[i - 1];
            }
        }
        return result;
    }
}

因为买入股票最好时机3和4都是动态规划实现的,我将在下一篇进行讲解

总结

在这篇博客中,我们将深入探讨贪心算法的精髓,从经典问题到实际案例,一一呈现其独特的魅力。通过习题讲解,我们将揭开贪心算法的神秘面纱,探寻其中的逻辑与技巧,为读者提供清晰的指南。无论是初学者还是算法高手,都能从中获得启发与收获。让我们一起启程,探索贪心算法的奥秘,开启算法之旅的新篇章!此外祝大家周末愉快。

相关推荐
fkyyly16 分钟前
hermes解读
算法·code_agent
过期的秋刀鱼!32 分钟前
使用都热编码的分类特征
人工智能·算法·决策树·机器学习·分类·数据挖掘
wabs66641 分钟前
关于哈希表【力扣383.赎金信的思考】
算法·leetcode·散列表
love_muming1 小时前
二叉树操作全解析:从递归到层序遍历
java·数据结构·算法·二叉树
.道阻且长.10 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
To_OC12 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
Forever Nore14 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法
hansang_IR15 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
Tisfy16 小时前
LeetCode 3731.找出缺失的元素:哈希 / 排序
算法·leetcode·哈希算法·排序·哈希表