最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python買(mǎi)賣(mài)股票的最佳時(shí)機(jī)(基于貪心/蠻力算法)

 更新時(shí)間:2019年07月05日 14:59:10   作者:劍峰隨心  
這篇文章主要介紹了python買(mǎi)賣(mài)股票的最佳時(shí)機(jī)(基于貪心/蠻力算法),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

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

題目要求

給定一個(gè)數(shù)組,它的第 i 個(gè)元素是一支給定股票第 i 天的價(jià)格。

設(shè)計(jì)一個(gè)算法來(lái)計(jì)算你所能獲取的最大利潤(rùn)。你可以盡可能地完成更多的交易(多次買(mǎi)賣(mài)一支股票)。

注意:你不能同時(shí)參與多筆交易(你必須在再次購(gòu)買(mǎi)前出售掉之前的股票)。

看到這個(gè)題目 最初的想法是蠻力法

通過(guò)兩層循環(huán) 不斷計(jì)算不同天之間的利潤(rùn)及利潤(rùn)和

下面上代碼

class Solution(object):
  def maxProfit(self, prices):
    """
    :type prices: List[int]
    :rtype: int
    """

    self.allbuy1 = []  #單次買(mǎi)賣(mài)的差值數(shù)組 (可能為負(fù))
    self.allbuy2 = []  #所有可能買(mǎi)賣(mài)的利潤(rùn)數(shù)組 (可能為負(fù))
               # allbuy1和allbuy2的區(qū)別為一個(gè)是單次買(mǎi)賣(mài) 一個(gè)是多次買(mǎi)賣(mài)和
    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:上一次買(mǎi)入的價(jià)格 b:今天賣(mài)出的價(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):       #如果買(mǎi)入是第2+1天以后 則可以加上之前的利潤(rùn)
          self.allbuy2.append(result) #多次買(mǎi)賣(mài)利潤(rùn)放入數(shù)組
        self.curbuy(plist,j+1,result)  #遞歸 j+1:賣(mài)出的后一天 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)

分析:

這個(gè)代碼理解起來(lái)簡(jiǎn)單 就是將所有可能都放入數(shù)組中 找出最大一個(gè)可能

將這個(gè)代碼提交時(shí) 顯示 超出時(shí)間限制 確實(shí) 如果輸入的數(shù)組長(zhǎng)度非常大時(shí) 計(jì)算量巨大 出現(xiàn)錯(cuò)誤

——————————————————————————————————————————————————————————————————————————————

更換思路:利用貪心算法解決此事

首先介紹 一下貪心算法: 對(duì)問(wèn)題只對(duì)當(dāng)前情況進(jìn)行最優(yōu)解處理,之后發(fā)生什么對(duì)之前的決定都不改變。簡(jiǎn)單的說(shuō)就是一個(gè)局部最優(yōu)解的過(guò)程

介紹個(gè)例子就明白了: 找零錢(qián)問(wèn)題

假設(shè)有面值為5元、2元、1元、5角、2角、1角的貨幣,需要找給顧客4元6角現(xiàn)金,為使付出的貨幣的數(shù)量最少

  •   首先找出小于4元6角的最大面值(2元)
  •   其次找出小于2元6角的最大面值(2元)
  •   接著找出小于6角的最大面值(5角)
  •   最后找出小于1角的最大面值(1角) ---付出4張紙幣

介紹完了貪心算法簡(jiǎn)單思想 就利用該方法解決對(duì)應(yīng)問(wèn)題

在已知股票價(jià)格走勢(shì)情況下 只需要對(duì)下一天進(jìn)行判斷 如果漲了 則買(mǎi) 如果跌了則賣(mài) 這樣收益會(huì)保持固定增長(zhǎng)

當(dāng)然了 有人會(huì)提出 我可以選擇不賣(mài)等幾天再賣(mài) 或不買(mǎi)等幾天再買(mǎi) 的方式 一樣可以保持增長(zhǎng) 但是如圖

如果在第2天買(mǎi)入 3天賣(mài)出 4天買(mǎi)入 5天賣(mài)出 收益為A+B

如果在第2天買(mǎi)入 5天賣(mài)出 收益為 C

明顯得出A+B大于C 所以貪心法在這種情況非常適用并且肯定得到最優(yōu)解

直接上代碼

class Solution(object):
  def maxProfit(self, prices):
    profit = 0
    for day in range(len(prices)-1):
      differ = prices[day+1] - prices[day]
      if differ > 0:
        profit += differ
    return profit
if __name__ == '__main__':
    test=Solution()
    prices = [5,7,3,9] # 輸入的每日股票數(shù)組
    print(test.maxProfit(prices))

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • LyScript實(shí)現(xiàn)內(nèi)存交換與差異對(duì)比的方法詳解

    LyScript實(shí)現(xiàn)內(nèi)存交換與差異對(duì)比的方法詳解

    LyScript?針對(duì)內(nèi)存讀寫(xiě)函數(shù)的封裝功能并不多,只提供了內(nèi)存讀取和內(nèi)存寫(xiě)入函數(shù)的封裝,本篇文章將繼續(xù)對(duì)API進(jìn)行封裝,實(shí)現(xiàn)一些在軟件逆向分析中非常實(shí)用的功能,需要的可以參考一下
    2022-08-08
  • Python3.10的一些新特性原理分析

    Python3.10的一些新特性原理分析

    由于采用了新的發(fā)行計(jì)劃:PEP 602 -- Annual Release Cycle for Python,我們可以看到更短的開(kāi)發(fā)窗口,我們有望在 2021 年 10 月使用今天分享的這些新特性
    2021-09-09
  • 60行Python PyGame代碼實(shí)現(xiàn)簡(jiǎn)單的迷宮游戲

    60行Python PyGame代碼實(shí)現(xiàn)簡(jiǎn)單的迷宮游戲

    這篇文章主要為大家詳細(xì)介紹如何通過(guò)了60行Python PyGame代碼實(shí)現(xiàn)一個(gè)簡(jiǎn)單的迷宮游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2023-12-12
  • Python中使用matplotlib庫(kù)繪制各種圖

    Python中使用matplotlib庫(kù)繪制各種圖

    這篇文章主要介紹了Python中使用matplotlib庫(kù)繪制各種圖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • windows下 兼容Python2和Python3的解決方法

    windows下 兼容Python2和Python3的解決方法

    這篇文章主要介紹了windows下 兼容Python2和Python3的解決方法,需要的朋友可以參考下
    2018-12-12
  • Python列表對(duì)象中元素的刪除操作方法

    Python列表對(duì)象中元素的刪除操作方法

    列表的刪操作指的是在列表中刪除已存在的元素,列表中的元素被刪除后,后面所有的元素依次往前移動(dòng)一位,掛在被刪除元素的索引下,保證每一個(gè)索引都有元素,這篇文章主要介紹了Python列表對(duì)象中元素的刪除操作方法,需要的朋友可以參考下
    2022-12-12
  • Python multiprocessing.Manager介紹和實(shí)例(進(jìn)程間共享數(shù)據(jù))

    Python multiprocessing.Manager介紹和實(shí)例(進(jìn)程間共享數(shù)據(jù))

    這篇文章主要介紹了Python multiprocessing.Manager介紹和實(shí)例(進(jìn)程間共享數(shù)據(jù)),本文介紹了Manager的dict、list使用例子,同時(shí)介紹了namespace對(duì)象,需要的朋友可以參考下
    2014-11-11
  • pandas中ix的使用詳細(xì)講解

    pandas中ix的使用詳細(xì)講解

    這篇文章主要介紹了pandas中ix的使用詳細(xì)講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python?Pillow圖像降噪處理顏色處理

    python?Pillow圖像降噪處理顏色處理

    這篇文章主要為大家介紹了python?Pillow圖像降噪處理顏色處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Python使用Networkx實(shí)現(xiàn)復(fù)雜的人物關(guān)系圖

    Python使用Networkx實(shí)現(xiàn)復(fù)雜的人物關(guān)系圖

    日常工作、生活中我們經(jīng)常會(huì)遇到一些復(fù)雜的事務(wù)關(guān)系,比如人物關(guān)系,那如何才能清楚直觀的看清楚這些任務(wù)關(guān)系呢?所以小編給大家介紹了Python如何使用Networkx實(shí)現(xiàn)復(fù)雜的人物關(guān)系圖,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2023-11-11

最新評(píng)論

沧州市| 类乌齐县| 贡山| 巴彦县| 比如县| 永福县| 江陵县| 英德市| 宿州市| 嘉定区| 阜康市| 嵩明县| 紫金县| 淮南市| 湟源县| 溆浦县| 公主岭市| 东兰县| 缙云县| 台中市| 江安县| 上虞市| 泾源县| 万年县| 莎车县| 休宁县| 余庆县| 浑源县| 平舆县| 同德县| 襄汾县| 灵川县| 天津市| 开化县| 绵竹市| 中宁县| 大洼县| 舞钢市| 永川市| 海兴县| 根河市|