LeetCode 122. 买卖股票的最佳时机 II
题目描述
思路分析
解法一:贪心(推荐)
核心思路:
允许无限次交易,等价于累加所有相邻两天的正差值。
推导过程:
- 若
prices = [a, b, c],最优利润 =(c - a)=(b - a) + (c - b)(分拆为逐日收益)- 因此:只要今天价格高于昨天(
prices[i] > prices[i-1]),就加入利润- 这等价于每个「上坡」区间都完整参与交易
贪心正确性:每天独立决策「是否参与今日涨幅」,各决策互不影响,局部最优 = 全局最优。
复杂度分析:
- 时间复杂度:O(n),其中 n 为价格数组长度,仅遍历一次
- 空间复杂度:O(1),仅使用常数额外空间
class Solution {
public int maxProfit(int[] prices) {
int res = 0;
for (int i = 1; i < prices.length; i++) {
// 只累加正差值(所有上涨天数的利润)
if (prices[i] > prices[i - 1]) {
res += prices[i] - prices[i - 1];
}
}
return res;
}
}
func maxProfit(prices []int) int {
var res int
for i := 1; i < len(prices); i++ {
// 只累加正差值(所有上涨天数的利润)
if prices[i] > prices[i-1] {
res += prices[i] - prices[i-1]
}
}
return res
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 121. 买卖股票的最佳时机 | 简单 | 一次交易贪心/DP |
| 123. 买卖股票的最佳时机 III | 困难 | 最多两次交易 DP |
| 188. 买卖股票的最佳时机 IV | 困难 | 最多 k 次交易 DP |
| 309. 买卖股票的最佳时机含冷冻期 | 中等 | 状态机 DP |
| 714. 买卖股票的最佳时机含手续费 | 中等 | 贪心/DP |
| 53. 最大子数组和 | 中等 | 贪心/DP 思路类似 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!

