首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 筆記:Best Time to Buy and Sell Stock II - 無限次交易最大利潤

     編輯:關於C++

題目描述

給定每日股價,可完成任意次數交易(賣出後才能再買),求最大利潤。本質上是求所有「上升段」的價差之和。

貪心證明

對於任意上升段 p[i] < p[i+1] < ... < p[j],利潤 p[j] - p[i] 等價於逐日差價之和 Σ(p[k+1]-p[k])。因此只需遍歷數組,累加所有 prices[i] > prices[i-1] 的正差價。

代碼實現 (C++ / Java / Python)

class Solution {
public:
    int maxProfit(vector& prices) {
        int profit = 0;
        for (int i = 1; i < prices.size(); ++i)
            if (prices[i] > prices[i-1])
                profit += prices[i] - prices[i-1];
        return profit;
    }
};
public class Solution {
    public int maxProfit(int[] prices) {
        int profit = 0;
        for (int i = 1; i < prices.length; i++)
            if (prices[i] > prices[i-1])
                profit += prices[i] - prices[i-1];
        return profit;
    }
}
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        return sum(max(0, prices[i] - prices[i-1]) for i in range(1, len(prices)))

複雜度

  • 時間:O(n)
  • 空間:O(1)

系列對比

題目交易次數限制核心方法
I (121)≤ 1單遍歷維護最小值
II (122)無限貪心累加正差價
III (123)≤ 2雙向 DP 分割點
IV (188)≤ klocal/global DP

總結

Stock II 是系列中最簡單的一題,核心洞見:「只要明天比今天漲,今天就買、明天賣」。這種貪心策略在無限次交易下最優。面試中可順勢引出 Stock III/IV 的 DP 思路,展示知識體系廣度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved