開始刷leetcode算法題 今天做的是“買賣股票的最佳時(shí)機(jī)”
題目要求
給定一個(gè)數(shù)組,它的第 i 個(gè)元素是一支給定股票第 i 天的價(jià)格。
設(shè)計(jì)一個(gè)算法來計(jì)算你所能獲取的大利潤。你可以盡可能地完成更多的交易(多次買賣一支股票)。
注意:你不能同時(shí)參與多筆交易(你必須在再次購買前出售掉之前的股票)。
看到這個(gè)題目 最初的想法是蠻力法
通過兩層循環(huán) 不斷計(jì)算不同天之間的利潤及利潤和
下面上代碼
class Solution(object): def maxProfit(self, prices): """ :type prices: List[int] :rtype: int """ self.allbuy1 = [] #單次買賣的差值數(shù)組 (可能為負(fù)) self.allbuy2 = [] #所有可能買賣的利潤數(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: 利潤 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) #單次利潤放入數(shù)組 result = obj + temp #將之前的利潤加上今天的利潤 if(x>=2): #如果買入是第2+1天以后 則可以加上之前的利潤 self.allbuy2.append(result) #多次買賣利潤放入數(shù)組 self.curbuy(plist,j+1,result) #遞歸 j+1:賣出的后一天 result:利潤 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)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容