代码解决
class Solution { public: int maxProfit(vector<int>& prices) { int result = 0; // 初始化结果为0,表示初始利润为0 // 从第二天开始遍历价格数组 for (int i = 1; i < prices.size(); i++) { // 如果当天价格比前一天价格高,则将差价加入到结果中 result += max(0, prices[i] - prices[i - 1]); } return result; // 返回最终的最大利润 } };
代码解释
初始化:
result
初始化为0,用于存储累积的最大利润。遍历价格数组:
- 从第二天开始(即
i=1
),遍历价格数组prices
。- 对于每一天
i
,比较当天的价格prices[i]
和前一天的价格prices[i-1]
。- 如果当天的价格高于前一天的价格,即
prices[i] > prices[i-1]
,则计算这两天的差价prices[i] - prices[i-1]
并将其加入到result
中。否则,差价为负数或零,不进行任何操作。返回结果:
- 返回
result
,即通过在每个上涨的时段进行买卖得到的最大利润。示例
假设有一个价格数组
prices = [7,1,5,3,6,4]
:
- 第1天到第2天:1 - 7 = -6,不加到利润中。
- 第2天到第3天:5 - 1 = 4,加到利润中,
result = 4
。- 第3天到第4天:3 - 5 = -2,不加到利润中。
- 第4天到第5天:6 - 3 = 3,加到利润中,
result = 4 + 3 = 7
。- 第5天到第6天:4 - 6 = -2,不加到利润中。
最终,
result = 7
,表示最大利润为7。时间和空间复杂度
- 时间复杂度:O(n),其中 n 是价格数组的长度。算法仅需遍历一次价格数组。
- 空间复杂度:O(1),只使用了常数空间来存储变量
result
。