题目描述
给你一个整数数组 prices
,其中 prices[i]
表示某支股票第 i
天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润 。
输入输出
1 | 输入:prices = [7,1,5,3,6,4] |
基本思路
与 剑指-Offer-63-股票的最大利润 不同的是 本题可以在同一天买入和卖出股票 也同时可在每一天买卖
贪心解法:在每一步总是做出在当前看来最好的选择
贪心算法和动态规划相比,它既不看前面(也就是说它不需要从前面的状态转移过来),也不看后面(无后效性,后面的选择不会对前面的选择有影响),因此贪心算法时间复杂度一般是线性的,空间复杂度是常数级别的;
这道题 「贪心」 的地方在于,对于 「今天的股价 - 昨天的股价」,得到的结果有 3 种可能:① 正数 ②0 ③负数
贪心算法的决策是: 只加正数 。
算法流程:遍历整个股票交易日价格列表 price
,策略是所有上涨交易日都买卖(赚到所有利润),所有下降交易日都不买卖(永不亏钱)。
- 设
tmp
为第i-1
日买入与第i
日卖出赚取的利润,即tmp = prices[i] - prices[i - 1]
; - 当该天利润为正
tmp > 0
,则将利润加入总利润profit
;当利润为 0 或为负,则直接跳过; - 遍历完成后,返回总利润
profit
。
复杂度分析:时复$O(N)$ 空复$O(1)$
java实现
1 | class Solution { |