在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

AI支招!終于知道如何買賣股票了!(妙招,干貨)

電子工程師 ? 來源: 聶磊 ? 作者:電子發燒友 ? 2019-03-01 11:05 ? 次閱讀

Leetcode第121題到123題連續出現了三道買賣股票相關的題目,一年前的網易筆試和半年前的百度面試都遇到過121題,不過不用慌,看完本文,你一定能夠完美解決買賣股票的問題。那么我們由易到難,依次介紹這三道題目。

best time to buy and sell stock

121題題目是這樣的:

在所有的過程中,我們只允許一次的買賣,基于這個問題,我們得到了下面的兩種解法。

解法1

根據題意,我們只需要找出數組中最大的差值即可,即 max(prices[j] – prices[i]) ,i < j。

如何得到最大的差值,只需要一次遍歷即可,在遍歷的用一個變量記錄遍歷到當前時的最小值即可。時間復雜度為O(n).

相關的實現代碼如下:

classSolution{publicintmaxProfit(int[]prices){if(prices==null||prices.length2){return0;}intmin=prices[0];intprofit=0;//第i天的價格可以看作是買入價也可以看作是賣出價for(inti=1;i//找到更低的買入價if(min>prices[i]){//更新買入價min=prices[I];}//當天的價格不低于買入價else{//如果當天買出的價格比之前賣出的價格高if(profit//更新賣出價profit=prices[i]-min;}}}returnprofit;}}
解法2

第二題的解法是我在面試百度的時候想到的,應用的是求數組中和最大的連續子數組序列的思路,這種思路又被稱為Kadane's Algorithm。我們有兩個問題:

如何轉化為求數組中的和最大的連續子序列?相鄰兩個數作差即可,這樣的話子序列的和就是我們在子序列開始賣出股票,在子序列最后買回股票所能得到的收益。

那么什么是Kadane's Algorithm呢?

kadane算法利用了數學歸納法的思想。簡單來講就是,隨意給你一個現成的數組,比如說?2, 1, ?3, 4, ?1, 2, 1, ?5, 4,讓你求其中的最大子列和,并不是容易的事情。但如果我們能從第一個數開始,隨著數組的擴充,始終對其最大子列和保持跟蹤,就可以輕易的求出任意一個數組的最大子列和。換言之,長度n的數組我們不會求,長度為一的總能算出來吧?長度為一的算出來了,二也就能算出來,二算出來了,三就能算出來,以此類推,用這種根據i求i+1的思想,我們就能達到最終目的。

詳細的分析一下,往一個長度為i的數組后面插入第i+1個數,這時,數組的最大子列只有兩種情況,要么包括第i+1個數,要么不包括第i+1個數。即:

maxsubarraum = max(以第i+1個數結尾的子列和, 不以第i+1個數結尾的子列和)。*

先計算前者,以第i+1個數結尾的子列和怎么算呢?很簡單,要么它是以第i個數結尾的子列作為前綴,要么它不以之作為前綴。假設第i+1個數為x,那么:

以第i+1個數結尾的子列和 = max(x,以第i個數結尾的子列和+x) (1)。

再計算后者,也就是不以第i+1個數結尾的子列和。這啥意思呢?其實就是插入第i+1個數之前的數組的最大子列和嘛。我們的數學歸納思想也就體現在這里,如果你還看不明白,我們將*式改寫:

數列長度i+1的最大子列和 = max(以第i+1個數結尾的子列和, 數列長度i的最大子列和)。(2)

看到了吧,無論(1)式還是(2)式,后一種情況都可以由前一種情況推出,妥妥的數學歸納。我們的算法只要從i=1開始,一步一步按照上面的規則走下去,那么任意一個數列的最大子列和就能求出來了!

classSolution{publicintmaxProfit(int[]prices){if(prices==null||prices.length<2)return0;intmaxCur=0;intmaxSoFar=0;for(inti=1;i0,Math.max(prices[i]-prices[i-1],maxCur+prices[i]-prices[i-1]));maxSoFar=Math.max(maxCur,maxSoFar);}returnmaxSoFar;}}
122.best time to buy and sell stockII

這道題的描述如下:

這道題允許無限次的買賣,簡直太簡單了吧,只要后一天的價值比前一天的大,那就買賣唄。不忍吐槽的一道題,代碼如下:

classSolution{publicintmaxProfit(int[]prices){if(prices==null||prices.length<2)return0;intmaxProf=0;for(inti=1;iprices[i-1]?prices[i]-prices[i-1]:0);}returnmaxProf;}}
123 best time to buy and sell stock III

這一題還是比較難的,題目描述如下:

我們只允許最多兩次的買賣,這可如何是好?我們同樣提供兩種思路:

解法1

這個問題可以轉換成Best Time to Buy and Sell Stock I問題。

兩次股票交易的核心是可以定義一個交易點,在這個交易點之前可以做一次交易(賺的最大數目的錢為firstProf),在這個交易點之后可以做一個交易(賺的最大數目的錢是secondProf)。那么要求的是max(firstProf+secondProf)。但是這個方法的時間復雜度是O(N^2),空間復雜度是O(1)。leetcode中顯示超時。

可以使用兩次掃描的方法避免上面的雙重循環。

不同于Best Time to Buy and Sell Stock I中定義的初始狀態A[i]表示第i天賣出掙的最大數目的錢,這個更進一步直接定義A[i]表示前i天賺的最大數目的錢。minPrice表示從第0天到第i-1天中的最低價格。

A[0]=0。(初始狀態)A[1]=max(prices[1]-prices[0],A[0])A[2]=max(prices[2]-minPrice,A[1]).....

即A[i]=max(price[i]-minPrice,A[i-1]).

另外一次掃描從數組后向前掃描,定義B[i]表示從第i天到最后一天n能賺的最大數目的錢。

maxPrice表示第i+1天到n天的最高價格。B[n]=0。(初始狀態)B[n-1]=max(maxPrice-prices[n-1],B[n])B[n-2]=max(maxPrice-prices[n-2],B[n-1]).....

即B[i]=max(maxPrice-prices[i],B[i+1])

那么以第i天為分割點能賺的最多數目的錢為A[i]+B[i]問題的解為max{A[i]+B[i]}。0<=i<=n。時間復雜度是O(N),空間復雜度是O(N)。

classSolution{publicintmaxProfit(int[]prices){if(prices==null||prices.length<2)return0;int[]asc=newint[prices.length];int[]desc=newint[prices.length];intn=prices.length;intminprice=prices[0];intmaxProf=0;asc[0]=0;for(inti=1;iasc[i]=Math.max(prices[i]-minprice,maxProf);minprice=Math.min(prices[i],minprice);maxProf=asc[i];}desc[prices.length-1]=0;maxProf=0;intmaxprice=prices[prices.length-1];for(inti=prices.length-2;i>=0;i--){desc[i]=Math.max(maxprice-prices[i],maxProf);maxprice=Math.max(maxprice,prices[i]);maxProf=desc[i];}maxProf=0;for(inti=0;iasc[i]+desc[i]);}returnmaxProf;}}
解法2

第二種解法的核心是假設手上最開始只有0元錢,那么如果買入股票的價格為price,手上的錢需要減去這個price,如果賣出股票的價格為price,手上的錢需要加上這個price。

因此我們定義了4個狀態:

Buy1[i]表示前i天做第一筆交易買入股票后剩下的最多的錢;Sell1[i]表示前i天做第一筆交易賣出股票后剩下的最多的錢;Buy2[i]表示前i天做第二筆交易買入股票后剩下的最多的錢;Sell2[i]表示前i天做第二筆交易賣出股票后剩下的最多的錢;

那么假設我們在第i天時第二次賣出股票,我們賣出股票可以獲得Buy2[i-1]+prices[i]的錢,假設在第i天前已經完成了兩筆交易,那么我們最多的錢是Sell2[i-1],因此Sell2[i]=max{Sell2[i-1],Buy2[i-1]+prices[I]}同樣的道理,假設我們在第i天時第二次買入股票,我們手中的錢是Sell[i-1]-prices[i],假設我們在第i天錢已經賣出了兩次股票,那么我們最多的錢是Buy2[i-1],因此Buy2[i]=max{Buy2[i-1],Sell[i-1]-prices[I]}同樣的道理我們還可以得到:Sell1[i]=max{Sell[i-1],Buy1[i-1]+prices[I]}Buy1[i]=max{Buy[i-1],-prices[I]}

可以發現上面四個狀態都是只與前一個狀態有關,所以可以不使用數組而是使用變量來存儲即可。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 人工智能
    +關注

    關注

    1791

    文章

    47282

    瀏覽量

    238534

原文標題:如何買賣股票?不要慌,我有妙招!

文章出處:【微信號:atleadai,微信公眾號:LeadAI OpenLab】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于網絡共識的股票價格行為數據挖掘(英文

    【作者】:賴興瑞;張東站;段江嬌;【來源】:《心智與計算》2010年01期【摘要】:股票價格行為數據挖掘激發了計算機科學、機器學習及其他領域研究的廣泛關注。然而,由于股票價格本身的不確定性和股市
    發表于 04-24 09:56

    深圳天瑞地安解析股票軟件的功能需求

    強勁的增長勢頭。  伴隨著移動互聯網技術的發展,股票APP軟件開發也進入了全新的階段。各種股票APP軟件更是層出不窮,如同花順、招商致遠。不過股票APP要想贏得客戶信賴,個性化體驗是制勝關鍵!
    發表于 02-13 19:16

    股票數據如何分析

    股票數據分析
    發表于 05-29 10:49

    2018人工智能股票龍頭

    2018人工智能股票龍頭,2019-01-07 10:49:43近年來中國的人工智能行業可以說是***,一邊是像云從科技、商湯科技這些持續獲得融資的AI巨頭,一邊是AI創業公司的密集倒閉,根據
    發表于 07-28 07:40

    經音頻電話系統處理現金轉帳及股票買賣授權及補償協議

    經音頻電話系統處理現金轉帳及股票買賣授權及補償協議
    發表于 07-13 20:45 ?16次下載

    節約電池有妙招

    節約電池有妙招  少剎車 勻速騎 起步人力助騎        在日前揚州市某單位舉辦的電動車極限挑戰賽上,不同品牌的電
    發表于 11-10 16:44 ?441次閱讀

    手機=定時炸彈?專家支招讓您手機防竊聽

    手機=定時炸彈?專家支招讓您手機防竊聽
    發表于 12-28 08:56 ?631次閱讀

    馬云的話絕對可信 終于知道馬云為什么不讓年輕人去買房!原來如此

    終于知道馬云為什么不讓年輕人去買房!原來阿里有大招啊!
    發表于 08-12 10:15 ?1.4w次閱讀

    終于知道手機AI芯片的作用是什么

    手機上的AI技術確實能夠提升手機的運行速度,但是不是所有宣稱具有AI功能的手機在運行速度上都能維持高水平。只有搭載了人工智能AI芯片的手機,在獨立的高浮點性能芯片支持下,在處理一些任務時才能高效率完成。
    發表于 01-31 09:54 ?2.2w次閱讀

    樂視網將進入停牌狀態——這是股票暫停上市程序的前奏

    樂視網明確表示,公司預約的年報披露日期為4月26日,如果公司觸及《創業板股票上市規則》(2018年11月修訂)13.1.1相關規定,即經審計后上市公司2018年度歸母凈資產為負,公司股票將被暫停上市,暨公司股票將于4月26日開市
    的頭像 發表于 04-26 11:40 ?2941次閱讀

    如何快速設計脈搏血氧儀?德州儀器來支招

    如何快速設計脈搏血氧儀?德州儀器來支招
    發表于 10-31 08:23 ?6次下載
    如何快速設計脈搏血氧儀?德州儀器來<b class='flag-5'>支招</b>!

    干貨 | 數字萬用表四種妙用方法,你知道么?

    干貨 | 數字萬用表四種妙用方法,你知道么?
    的頭像 發表于 01-05 09:52 ?1138次閱讀

    A6伺服操作小妙招您必須掌握!

    A6伺服操作小妙招您必須掌握
    的頭像 發表于 02-06 15:37 ?1052次閱讀
    A6伺服操作小<b class='flag-5'>妙招</b>您必須掌握!

    比起各式各樣的AI應用,我們可能更需要AI for OS

    打造 AI時代的操作系統,谷歌和微軟都在搶船票了
    的頭像 發表于 06-07 22:19 ?872次閱讀
    比起各式各樣的<b class='flag-5'>AI</b>應用,我們可能更需要<b class='flag-5'>AI</b> for OS

    氣象監測站——氣象觀測有妙招

    氣象監測站——氣象觀測有妙招
    的頭像 發表于 09-04 09:47 ?486次閱讀
    主站蜘蛛池模板: 国内视频一区二区| 日韩成人一级| 四虎在线永久视频观看| 中文字幕精品一区二区三区视频| 中文字幕第二区| 四虎影院最新网站| 大色综合色综合网站| 天天综合天天色| 狠狠干狠狠搞| 亚洲一区二区三区网站| 亚洲欧洲一区| 欧美在线色视频| 国产精品单位女同事在线| 天天躁夜夜| 色噜噜人体337p人体| 婷婷99精品国产97久久综合| 美女被免费网站视频九色| china3p单男精品自拍| 欧美成人免费大片888| 欧美xxxx极品流血| 亚洲欧洲色| 97影院理论在线观看| 国产一级在线观看| 轻点灬大ji巴太粗太长了爽文| 婷婷六月激情在线综合激情| aa1在线天堂| 天天躁狠狠躁夜夜躁2021| 色男人社区| 爱情社保片鲁丝片一区| 国产精品夜夜春夜夜爽| 成年人三级视频| 五月亭亭激情五月| 中国又粗又大又爽的毛片| 福利99| 永井玛丽亚中文在线观看视频| 欧美日韩国产一区二区| 亚州怡红院| h网站在线观看| 色偷偷男人天堂| a毛片基地免费全部香蕉| 日本在线不卡一区|