開始刷leetcode算法題 今天做的是“買賣股票的最佳時(shí)機(jī)”

題目要求
給定一個(gè)數(shù)組,它的第 i 個(gè)元素是一支給定股票第 i 天的價(jià)格。
設(shè)計(jì)一個(gè)算法來計(jì)算你所能獲取的大利潤(rùn)。你可以盡可能地完成更多的交易(多次買賣一支股票)。
注意:你不能同時(shí)參與多筆交易(你必須在再次購(gòu)買前出售掉之前的股票)。
看到這個(gè)題目 最初的想法是蠻力法
通過兩層循環(huán) 不斷計(jì)算不同天之間的利潤(rùn)及利潤(rùn)和
下面上代碼
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
self.allbuy1 = [] #單次買賣的差值數(shù)組 (可能為負(fù))
self.allbuy2 = [] #所有可能買賣的利潤(rùn)數(shù)組 (可能為負(fù))
# allbuy1和allbuy2的區(qū)別為一個(gè)是單次買賣 一個(gè)是多次買賣和
self.curbuy(prices,0,0) #prices 為價(jià)格表 0:初始 0:
#print(self.allbuy1)
#print(self.allbuy2)
return self.picBigest(self.allbuy2)
def buyticket(self,prilist,a,b): #list:放入的價(jià)格數(shù)組 a:上一次買入的價(jià)格 b:今天賣出的價(jià)格
return prilist[b] -prilist[a] #返回 賺取得價(jià)格
def curbuy(self,plist,x,result): #plist:價(jià)格數(shù)組 x:當(dāng)天的數(shù)組坐標(biāo) result: 利潤(rùn)
obj=result #固定上一次的價(jià)格 保存為上一個(gè)遞歸
lens=len(plist) #天數(shù)
for i in range(x,lens-1):
for j in range(i+1,lens):
temp=self.buyticket(plist,i, j)
self.allbuy1.append(temp)
self.allbuy2.append(temp) #單次利潤(rùn)放入數(shù)組
result = obj + temp #將之前的利潤(rùn)加上今天的利潤(rùn)
if(x>=2): #如果買入是第2+1天以后 則可以加上之前的利潤(rùn)
self.allbuy2.append(result) #多次買賣利潤(rùn)放入數(shù)組
self.curbuy(plist,j+1,result) #遞歸 j+1:賣出的后一天 result:利潤(rùn)
def picBigest(self,reslist):
big=0
for i in reslist:
if (i>big):
big=i
print(big)
return big
if __name__ == '__main__':
test=Solution()
prices = [5,7,3,8] # 輸入的每日股票數(shù)組
test.maxProfit(prices)
網(wǎng)站題目:python買賣股票的最佳時(shí)機(jī)(基于貪心/蠻力算法)-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://chinadenli.net/article18/dgpgdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、動(dòng)態(tài)網(wǎng)站、網(wǎng)站策劃、網(wǎng)站改版、網(wǎng)站建設(shè)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容