博客
关于我
LeetCode 121. 买卖股票的最佳时机
阅读量:799 次
发布时间:2023-04-16

本文共 1105 字,大约阅读时间需要 3 分钟。

要解决这个问题,我们需要找到给定股票价格数组中能够获得的最大利润。规则是只能买入一次并卖出一次,且卖出价格必须高于买入价格。

方法思路

我们可以使用一个高效的算法来解决这个问题。这个算法的时间复杂度是O(n),空间复杂度是O(1),非常适合处理大数据量的情况。具体步骤如下:

  • 初始化变量:记录当前最小价格 min_price 和最大利润 max_profit。初始时,min_price 设为第一个价格,max_profit 设为0。
  • 遍历价格数组:从第二个价格开始遍历。
    • 如果当前价格大于 min_price,计算当前价格与 min_price 的利润,并与 max_profit 比较,更新 max_profit
    • 如果当前价格小于 min_price,更新 min_price
  • 返回结果:遍历结束后,返回 max_profit
  • 这种方法确保我们只遍历数组一次,时间复杂度为O(n),能够高效地解决问题。

    解决代码

    #include 
    using namespace std;int maxProfit(vector
    &prices) { if (prices.size() == 0) return 0; int min_price = prices[0]; int max_profit = 0; for (int i = 1; i < prices.size(); ++i) { if (prices[i] > min_price) { int profit = prices[i] - min_price; if (profit > max_profit) { max_profit = profit; } } else { min_price = prices[i]; } } return max_profit;}

    代码解释

    • 初始化min_price 设为第一个价格,max_profit 设为0。
    • 遍历数组:从第二个元素开始,检查当前价格与 min_price 的关系。
      • 如果当前价格高于 min_price,计算利润,并更新 max_profit
      • 如果当前价格低于 min_price,更新 min_price
    • 返回结果:遍历结束后,返回 max_profit

    这种方法确保了在最优的时间和空间复杂度下解决问题,适用于各种股票价格数组。

    转载地址:http://ydgfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现随机图生成器算法(附完整源码)
    查看>>
    OJ中常见的一种presentation error解决方法
    查看>>
    OK335xS UART device registe hacking
    查看>>
    ok6410内存初始化
    查看>>
    OKR为什么到今天才突然火了?
    查看>>
    ollama本地部署DeepSeek(Window图文说明)
    查看>>
    onCreate()方法中的参数Bundle savedInstanceState 的意义用法
    查看>>
    OneBlog Shiro 反序列化漏洞复现
    查看>>
    one_day_one--mkdir
    查看>>
    ONI文件生成与读取
    查看>>
    oobbs开发手记
    查看>>
    OPEN CASCADE Curve Continuity
    查看>>
    Open vSwitch实验常用命令
    查看>>
    Open WebUI 忘了登入密码怎么办?
    查看>>
    open-vm-tools-dkms : 依赖: open-vm-tools (>= 2:9.4.0-1280544-5ubuntu3) 但是它将不会被安装
    查看>>
    Openbox-桌面图标设置
    查看>>
    opencart出现no such file or dictionary
    查看>>
    opencv Mat push_back
    查看>>
    opencv waitKey() 函数理解及应用
    查看>>
    OpenCV 中的图像转换
    查看>>