Leetcode: Best Time to Buy and Sell Stock IV
来源:互联网 发布:软件原型设计 编辑:程序博客网 时间:2024/05/22 16:45
Question
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).
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
Show Tags
Show Similar Problems
Wrong Solution
class Solution(object): def maxProfit(self, k, prices): """ :type k: int :type prices: List[int] :rtype: int """ if k<=0 or prices==[]: return 0 globalv = [[0]*(k+1) for ind in range(len(prices))] localv = [[0]*(k+1) for ind in range(len(prices))] for i in range(len(prices)): diff = prices[i] - prices[i-1] for j in range(1,k+1): localv[i][j] = max( globalv[i-1][j-1] + max(diff,0), localv[i-1][j]+diff ) globalv[i][j] = max( globalv[i-1][j], localv[i][j] ) return globalv[len(prices)-1][k]
Runtime Error since space complexity O(n*k)
My first try
class Solution(object): def maxProfit(self, k, prices): """ :type k: int :type prices: List[int] :rtype: int """ if k<=0 or prices==[]: return 0 if k>=len(prices): return self.maxprofit2(prices) globalv = [0]*(k+1) localv = [0]*(k+1) for i in range(1,len(prices)): diff = prices[i] - prices[i-1] for j in range(1,k+1): localv[j] = max( globalv[j-1] + max(diff,0), localv[j]+diff ) globalv[j] = max( globalv[j], localv[j] ) return globalv[k] def maxprofit2(self,prices): maxv = 0 for ind in range(1,len(prices)): if prices[ind]>prices[ind-1]: maxv += prices[ind]-prices[ind-1] return maxv
Solution 1
time complexity: O(n*k)
space complexity: O(k)
Get idea from here1, here2, here3, here4
class Solution(object): def maxProfit(self, k, prices): """ :type k: int :type prices: List[int] :rtype: int """ if k<=0 or prices==[]: return 0 if k>=len(prices): return self.maxprofit2(prices) globalv = [0]*(k+1) localv = [0]*(k+1) for i in range(1,len(prices)): diff = prices[i] - prices[i-1] for j in range(k,0,-1): localv[j] = max( globalv[j-1] + max(diff,0), localv[j]+diff ) globalv[j] = max( globalv[j], localv[j] ) return globalv[k] def maxprofit2(self,prices): maxv = 0 for ind in range(1,len(prices)): if prices[ind]>prices[ind-1]: maxv += prices[ind]-prices[ind-1] return maxv
Solution 2
Get idea from here
0 0
- [LeetCode] Best Time to Buy and Sell Stock IV
- leetcode: Best Time to Buy and Sell Stock IV
- LeetCode(188) Best Time to Buy and Sell Stock IV
- Best Time to Buy and Sell Stock IV -- leetcode
- Best Time to Buy and Sell Stock IV--LeetCode
- LeetCode : Best Time to Buy and Sell Stock III & IV
- Best Time to Buy and Sell Stock IV Leetcode Java
- LeetCode: Best Time to Buy and Sell Stock IV
- leetcode 188---Best Time to Buy and Sell Stock IV
- LeetCode Best Time to Buy and Sell Stock IV
- [leetcode] 188.Best Time to Buy and Sell Stock IV
- LeetCode - Best Time to Buy and Sell Stock IV
- [LeetCode][Java] Best Time to Buy and Sell Stock IV
- 【leetcode】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: Best Time to Buy and Sell Stock IV
- LeetCode Best Time to Buy and Sell Stock IV
- 官网下载Google Chrome离线安装包
- ExtJS Grid 每个Cell都显示tooltip
- 当Python和R遇上北京二手房(下)
- Servlet与tomcat配置
- 密码学中的珍宝与窃贼
- Leetcode: Best Time to Buy and Sell Stock IV
- IOS_UI_Label
- PhotoView源码分析(3)
- 3Sum Closest
- 收藏的人工智能相关网站
- IOS_TextField,UIButton
- 字符串复制函数strcpy的实现算法
- u-boot2010.06的移植(1)——准备移植
- Android:使用fragment(碎片)—让你的应用更灵活(一)简单运用