Leetcode 买卖股票的最佳时机

这段代码的目的是解决"买卖股票的最佳时机"这个问题,即在给定的股票价格数组中,找到一次买入和卖出所能获得的最大利润。

算法思想:

  1. 定义两个变量

    • minPrice: 这个变量用于记录迄今为止遇到的最小股票价格(买入价格)。初始值设置为 Integer.MAX_VALUE,这样一开始任何遇到的股票价格都会更新这个值。
    • maxProfit: 这个变量用于记录当前所能获得的最大利润,初始值为 0。
  2. 遍历股票价格数组

    • 对于数组中的每个元素(即每天的股票价格),程序检查当前的股票价格是否比之前遇到的最小价格还要低。如果是这样,就更新 minPrice 为当前价格,这相当于记录在这一天买入股票。
    • 如果当前的价格比之前的最小价格高,那么计算当前卖出所能获得的利润(即当前价格减去 minPrice),并与之前记录的 maxProfit 比较。如果当前利润更大,就更新 maxProfit
  3. 返回结果

    • 当循环遍历完所有价格后,maxProfit 就会存储整个过程中最大的利润值。最终返回这个值。

关键点:

  • 这个算法的核心在于动态更新股票的最低买入价,同时计算每一天卖出时的最大可能利润。算法每次只遍历一次数组,时间复杂度为 (O(n)),非常高效。

例子分析:

假设输入的 prices 数组为 [7, 1, 5, 3, 6, 4],算法的执行过程如下:

  • 第1天(价格7):更新 minPrice = 7
  • 第2天(价格1):更新 minPrice = 1(遇到更低的价格)。
  • 第3天(价格5):计算利润 5 - 1 = 4,更新 maxProfit = 4
  • 第4天(价格3):利润为 3 - 1 = 2maxProfit 保持为4。
  • 第5天(价格6):利润为 6 - 1 = 5,更新 maxProfit = 5
  • 第6天(价格4):利润为 4 - 1 = 3maxProfit 保持为5。

最终输出的最大利润为 5

这段代码的效率很高,适合处理较大的股票价格数组。

java 实现代码:

java 复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int minPrice = Integer.MAX_VALUE, maxPro = 0;
        for(int i = 0; i < prices.length; ++i) {
            if(prices[i] < minPrice) {
                minPrice = prices[i];
            }
            maxPro = Math.max(maxPro, prices[i] - minPrice);
        }
        return maxPro;
    }
}
相关推荐
naruto_lnq1 小时前
分布式系统安全通信
开发语言·c++·算法
Jasmine_llq2 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
爱吃rabbit的mq2 小时前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
(❁´◡`❁)Jimmy(❁´◡`❁)3 小时前
Exgcd 学习笔记
笔记·学习·算法
YYuCChi3 小时前
代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)
算法·动态规划
不能隔夜的咖喱4 小时前
牛客网刷题(2)
java·开发语言·算法
VT.馒头4 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
进击的小头4 小时前
实战案例:51单片机低功耗场景下的简易滤波实现
c语言·单片机·算法·51单片机
咖丨喱5 小时前
IP校验和算法解析与实现
网络·tcp/ip·算法
罗湖老棍子6 小时前
括号配对(信息学奥赛一本通- P1572)
算法·动态规划·区间dp·字符串匹配·区间动态规划