题目列表
题目解析
题目代码
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
days = len(prices)
if days<2:
return 0
opt0, opt1 = 0, -prices[0]
for i in range(days):
lastopt0 = opt0
opt0 = max(opt0, opt1+prices[i])
opt1 = max(opt1, lastopt0-prices[i])
return opt0
这里输入的K可能会非常大,无法给数组分配足够多的内存。时间上当购买次数 K >= days/2 时,相当于K没有限制,转换成买卖股票的最佳时机 II求解。
class Solution(object):
def maxProfitNoK(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
days = len(prices)
if days<2:
return 0
opt0, opt1 = 0, -prices[0]
for i in range(days):
lastopt0 = opt0
opt0 = max(opt0, opt1+prices[i])
opt1 = max(opt1, lastopt0-prices[i])
return opt0
def maxProfit(self, k, prices):
"""
:type k: int
:type prices: List[int]
:rtype: int
"""
days = len(prices)
if days<2:
return 0
if k>days/2:
return self.maxProfitNoK(prices)
opt0 = [0 for _ in range(k+1)]
opt1 = [-prices[0] for _ in range(k+1)]
for i in range(days):
for j in range(k, 0, -1):
lastopt1 = opt1[j]
opt1[j] = max(opt1[j], opt0[j-1]-prices[i])
opt0[j] = max(opt0[j], lastopt1+prices[i])
return opt0[k]