欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python買賣股票的最佳時機(基于貪心/蠻力算法)

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

開始刷leetcode算法題 今天做的是“買賣股票的最佳時機”

題目要求

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

設計一個算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易(多次買賣一支股票)。

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

看到這個題目 最初的想法是蠻力法

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

下面上代碼

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

    self.allbuy1 = []  #單次買賣的差值數(shù)組 (可能為負)
    self.allbuy2 = []  #所有可能買賣的利潤數(shù)組 (可能為負)
               # allbuy1和allbuy2的區(qū)別為一個是單次買賣 一個是多次買賣和
    self.curbuy(prices,0,0) #prices 為價格表 0:初始 0:
    #print(self.allbuy1)
    #print(self.allbuy2)
    return self.picBigest(self.allbuy2)
  def buyticket(self,prilist,a,b):    #list:放入的價格數(shù)組 a:上一次買入的價格 b:今天賣出的價格
    return prilist[b] -prilist[a]  #返回 賺取得價格

  def curbuy(self,plist,x,result): #plist:價格數(shù)組 x:當天的數(shù)組坐標 result: 利潤
    obj=result           #固定上一次的價格 保存為上一個遞歸
    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)

分析:

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

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

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

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

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

介紹個例子就明白了: 找零錢問題

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

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

介紹完了貪心算法簡單思想 就利用該方法解決對應問題

在已知股票價格走勢情況下 只需要對下一天進行判斷 如果漲了 則買 如果跌了則賣 這樣收益會保持固定增長

當然了 有人會提出 我可以選擇不賣等幾天再賣 或不買等幾天再買 的方式 一樣可以保持增長 但是如圖

如果在第2天買入 3天賣出 4天買入 5天賣出 收益為A+B

如果在第2天買入 5天賣出 收益為 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))

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 使用python批量修改XML文件中圖像的depth值

    使用python批量修改XML文件中圖像的depth值

    這篇文章主要介紹了使用python批量修改XML文件中圖像的depth值,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • python中pass語句用法實例分析

    python中pass語句用法實例分析

    這篇文章主要介紹了python中pass語句用法,對比C++程序實例分析了pass語句的使用方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Django路由層如何獲取正確的url

    Django路由層如何獲取正確的url

    本文介紹路由層是如何進行路由匹配的,以diango1.x版本為例,文中通過示例代碼介紹的非常詳細,文中通過示例代碼介紹的非常詳細,
    2021-07-07
  • 5分鐘 Pipenv 上手指南

    5分鐘 Pipenv 上手指南

    這篇文章主要介紹了5分鐘 Pipenv 上手指南,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Python?time模塊之時間戳與結構化時間的使用

    Python?time模塊之時間戳與結構化時間的使用

    這篇文章主要為大家詳細介紹了Python中的time模塊以及如何利用time模塊實現(xiàn)時間戳與結構化時間,文中的示例代碼講解詳細,需要的可以參考一下
    2022-06-06
  • Python pip 常用命令匯總

    Python pip 常用命令匯總

    這篇文章主要介紹了Python pip 常用命令匯總,幫助大家更好的理解和使用pip命令,感興趣的朋友可以了解下
    2020-10-10
  • Python中類型檢查的詳細介紹

    Python中類型檢查的詳細介紹

    Python是一種非常動態(tài)的語言,函數(shù)定義中完全沒有類型約束。下面這篇文章主要給大家詳細介紹了Python中類型檢查的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Python轉換itertools.chain對象為數(shù)組的方法

    Python轉換itertools.chain對象為數(shù)組的方法

    這篇文章主要介紹了Python轉換itertools.chain對象為數(shù)組的方法,通過代碼給大家介紹了itertools 的 chain() 方法,需要的朋友可以參考下
    2020-02-02
  • Python的信號庫Blinker用法詳解

    Python的信號庫Blinker用法詳解

    在本篇文章里小編給大家整理了一篇關于Python的信號庫Blinker用法詳解內(nèi)容,有興趣的朋友們可以學習下。
    2020-12-12
  • PyTorch平方根報錯的處理方案

    PyTorch平方根報錯的處理方案

    這篇文章主要介紹了PyTorch平方根報錯的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05

最新評論