多笔交易股票最大化盈利问题及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; } }
代码解释
- 初始化总盈利:
totalProfit初始为0,用于累加所有盈利 - 遍历价格数组:从第2天(索引1)开始,对比当天与前一天的价格
- 累加上升利润:如果当天价格高于前一天,说明可以获得利润,将差值加到总盈利中
- 返回结果:遍历结束后,总盈利即为最大可获得利润
测试用例验证
- 示例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
相关产品推荐
相关产品推荐

