每日一题-贪心算法

目录

前言

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

总结

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

相关推荐
EterNity_TiMe_3 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
机器学习之心14 分钟前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds25 分钟前
FIFO和LRU算法实现操作系统中主存管理
算法
alphaTao1 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian1 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek2 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz2 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
jiao_mrswang3 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca3 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法
薯条不要番茄酱3 小时前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea