【leetcode】123.(Hard)Best Time to Buy and Sell Stock III

本文介绍了一种使用动态规划解决股票买卖问题的方法,通过维护四个状态buy1、sell1、buy2、sell2来找到两次交易的最大利润。代码实现简洁,易于理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:
DP,只是存储的空间是O(1)
这个讨论区的答案

首先buy1点是第一次买入点,对于当前点数,只有一个点数的时候只能买入,有两个及以上的点数时可以选择买入当前点数或者不买入当前点数即还是使用之前的点数。
sell1是第一次售出点,对于 当前点数可以选择售出,或者不售出
buy2 sell2同理

题目限制只能有2笔交易,如果有3笔、4笔就依次加入buy3、sell3…即可


提交代码:

class Solution {
	public int maxProfit(int[] prices) {
		int buy1 = Integer.MIN_VALUE, sell1 = 0;
		int buy2 = Integer.MIN_VALUE, sell2 = 0;

		for (int i = 0; i < prices.length; i++) {
			buy1 = Math.max(buy1, -1 * prices[i]);
			sell1 = Math.max(sell1, prices[i] + buy1);
			buy2 = Math.max(buy2, sell1 - prices[i]);
			sell2 = Math.max(sell2, prices[i] + buy2);
		}
		return sell2;
	}
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值