【发布时间】:2018-03-20 08:12:44
【问题描述】:
尝试解决this:假设您有一个数组,其中第 i 个元素是给定股票在第 i 天的价格。
设计一个算法来找到最大的利润。您最多可以完成两笔交易。
解决方案: 我正在做的是一种分而治之的方法。
dp[i][j]是ith到jth天之间的最大利润。计算如下:
dp[i][j] = max(dp[i][j], max(prices[i] - prices[j], dp[k][j], dp[i][k +1])),其中 k 小于 i 且大于 j。
现在我们只需要在下面找出两笔交易的最大利润:
m = max(m, max(dp[i][j], dp[k][j] + dp[i][k+1]))
请给我提示以解决此问题,因为此处提供的现有解决方案已超时。
class Solution(object):
def profit(self, prices, dp):
m = 0
for w in range(1, len(prices)):
for i in range(1, len(prices)):
for j in range(i-w, i):
if i-w < 0:
continue
for k in range(j, i):
dp[i][j] = max(dp[i][j], max(prices[i] - prices[j], dp[k][j], dp[i][k+1]))
m = max(m, max(dp[i][j], dp[k][j] + dp[i][k+1]))
return m
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
dp = [[0 for i in range(len(prices)+1)] for i in range(len(prices)+1)]
return self.profit(prices, dp)
【问题讨论】:
-
你是指先买后卖的最大利润吗?因为否则它只是最小值和最大值。
-
@Carlos:是的,先买后卖。
标签: python algorithm dynamic-programming