LC 121贪心简单第 65 / 95 题

买卖股票的最佳时机

Best Time to Buy and Sell Stock

贪心一次遍历
本机进度仅保存在当前浏览器

题目描述

给定一个数组 prices,其中 prices[i] 表示某支股票第 i 天的价格。你只能选择某一天买入并在未来的某个不同的日子卖出,求所能获取的最大利润;无法获利则返回 0。

示例:prices = [7, 1, 5, 3, 6, 4],第 2 天买入、第 5 天卖出,利润 6 - 1 = 5。

解题思路

  1. 遍历时维护"至今为止的最低买入价",当天的最优卖出利润 = 当天价格 - 最低价。
  2. 全局答案就是各天最优卖出利润的最大值,一遍扫描完成。
  3. 贪心成立的直观理由:最优卖出日 j 的最佳搭档一定是 j 之前的历史最低价,拆开看每个卖出日即可独立计算。

参考实现

查看参考实现Python · 建议先自行作答
def maxProfit(prices):
    # min_price 为历史最低买入价,逐日更新最大利润
    min_price = float('inf')
    profit = 0
    for p in prices:
        min_price = min(min_price, p)
        profit = max(profit, p - min_price)
    return profit

复杂度与归属

时间复杂度O(n)
空间复杂度O(1)
所属分类贪心
题源LeetCode 121

关联教程

返回题图鉴