每日一题-贪心算法

目录

前言

买入股票的最佳时机(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都是动态规划实现的,我将在下一篇进行讲解

总结

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

相关推荐
式5161 小时前
线性代数(七)主变量与特解
线性代数·算法
业精于勤的牙7 小时前
浅谈:算法中的斐波那契数(二)
算法·职场和发展
不穿格子的程序员8 小时前
从零开始写算法——链表篇4:删除链表的倒数第 N 个结点 + 两两交换链表中的节点
数据结构·算法·链表
liuyao_xianhui8 小时前
寻找峰值--优选算法(二分查找法)
算法
dragoooon348 小时前
[hot100 NO.19~24]
数据结构·算法
Tony_yitao9 小时前
15.华为OD机考 - 执行任务赚积分
数据结构·算法·华为od·algorithm
C雨后彩虹10 小时前
任务总执行时长
java·数据结构·算法·华为·面试
风筝在晴天搁浅10 小时前
代码随想录 463.岛屿的周长
算法
一个不知名程序员www10 小时前
算法学习入门---priority_queue(C++)
c++·算法