LeetCode #188: Best Time to Buy and Sell Stock IV
2016-09-04 11:42
441 查看
Problem Statement
(Source) Say you have an array for which the ith element is the price of a given stock on day i.Design an algorithm to find the maximum profit. You may complete at most k transactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
Analysis
dp[i][j]: the maximum profit can be achieved in the previous
jdays with at most
itransactions.
Time Complexity: O(kn2)
Space Complexity: O(kn)
Tags:
Dynamic Programming.
Solution
class Solution(object): def maxProfit(self, k, prices): """ :type k: int :type prices: List[int] :rtype: int """ if k <= 0 or (not prices) or len(prices) < 2: return 0 n = len(prices) res = 0 if k >= (n >> 1): # Arbitray transactions allowed in this case. dp = [0 for i in xrange(n + 1)] for i in xrange(2, n + 1): dp[i] = dp[i - 1] j = i - 1 while j > 0 and prices[i-1] > prices[j-1]: dp[i] = max(dp[i], dp[j-1] + prices[i-1] - prices[j-1]) j -= 1 return dp[-1] dp = [[0 for j in xrange(n)] for i in xrange(k + 1)] for i in xrange(1, k + 1): for j in xrange(1, n): dp[i][j] = dp[i][j-1] # Buy at day t and sell at day j. t = j - 1 while t >= 0 and prices[t] < prices[j]: profit = max(prices[j] - prices[t], 0) if t - 1 > 0: profit += dp[i-1][t-1] dp[i][j] = max(dp[i][j], profit) t -= 1 res = max(res, dp[i][j]) return res
相关文章推荐
- 188 Best Time to Buy and Sell Stock IV
- leetcode_188 Best Time to Buy and Sell Stock IV
- 188. Best Time to Buy and Sell Stock IV
- LeetCode 188 Best Time to Buy and Sell Stock IV (动态规划 推荐)
- [leetcode] 188. Best Time to Buy and Sell Stock IV 解题报告
- leetcode_[python/C++]_121/122/123/188.Best Time to Buy and Sell Stock I/II/III/IV
- leetcode(121)(122)(123)(188) Best Time to Buy and Sell Stock I/II/III/IV JAVA代码
- 188. Best Time to Buy and Sell Stock IV
- Java for LeetCode 188 Best Time to Buy and Sell Stock IV【HARD】
- leetcode 188---Best Time to Buy and Sell Stock IV
- LeetCode188:Best Time to Buy and Sell Stock IV
- 188. Best Time to Buy and Sell Stock IV
- leecode 解题总结:188. Best Time to Buy and Sell Stock IV
- Leetcode 188 Best Time to Buy and Sell Stock IV 至多k次买卖股票最大收益
- Hard-题目38:188. Best Time to Buy and Sell Stock IV
- 188. Best Time to Buy and Sell Stock IV (Array; DP)
- LeetCode(188) Best Time to Buy and Sell Stock IV
- LeetCode(188) Best Time to Buy and Sell Stock IV (Java)
- 188. Best Time to Buy and Sell Stock IV
- 188. Best Time to Buy and Sell Stock IV