You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多笔交易股票最大化盈利问题及Java代码优化求助

多笔交易股票最大化盈利问题解决方案

问题分析

给定整数数组prices,其中prices[i]表示第i天的股票价格,允许进行任意多笔交易(买入后必须卖出才能再次买入),计算可获得的最大盈利。核心逻辑是累加所有价格上升区间的差值——只要后一天价格高于前一天,就把这部分利润计入总盈利,这等价于在上升区间的起点买入、终点卖出,或者每天买卖(最终结果完全一致)。

原代码问题分析

你的代码存在以下关键错误:

  • 逻辑方向偏差:错误地追求单次交易的最大利润,而非累加所有盈利区间的总和
  • 循环控制混乱:手动修改i的值(i++和i=track)导致重复处理或漏处理天数
  • 变量管理不当:profit每次循环重置,且仅用单次交易利润更新总盈利,忽略了多笔交易的累加需求

修正后的代码

class Solution {
    public int maxProfit(int[] prices) {
        int totalProfit = 0;
        // 遍历所有相邻天数,累加上升区间的利润
        for (int i = 1; i < prices.length; i++) {
            if (prices[i] > prices[i - 1]) {
                totalProfit += prices[i] - prices[i - 1];
            }
        }
        return totalProfit;
    }
}

代码解释

  1. 初始化总盈利:totalProfit初始为0,用于累加所有盈利
  2. 遍历价格数组:从第2天(索引1)开始,对比当天与前一天的价格
  3. 累加上升利润:如果当天价格高于前一天,说明可以获得利润,将差值加到总盈利中
  4. 返回结果:遍历结束后,总盈利即为最大可获得利润

测试用例验证

  • 示例1:[7,1,5,3,6,4],盈利为(5-1)+(6-3)=4+3=7,符合输出要求
  • 示例2:[1,2,3,4,5],盈利为(2-1)+(3-2)+(4-3)+(5-4)=4,符合输出要求
  • 示例3:[7,6,4,3,1],无上升区间,总盈利为0,符合输出要求

该方案时间复杂度为O(n),空间复杂度为O(1),完全满足题目约束条件(1 <= prices.length <= 3 * 10^4)。

内容的提问来源于stack exchange,提问作者Sri Murugan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:10:14