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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

電子工程師 ? 來(lái)源: 聶磊 ? 作者:電子發(fā)燒友 ? 2019-03-01 11:05 ? 次閱讀

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

best time to buy and sell stock

121題題目是這樣的:

在所有的過(guò)程中,我們只允許一次的買(mǎi)賣(mài),基于這個(gè)問(wèn)題,我們得到了下面的兩種解法。

解法1

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

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

相關(guān)的實(shí)現(xiàn)代碼如下:

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

第二題的解法是我在面試百度的時(shí)候想到的,應(yīng)用的是求數(shù)組中和最大的連續(xù)子數(shù)組序列的思路,這種思路又被稱為Kadane's Algorithm。我們有兩個(gè)問(wèn)題:

如何轉(zhuǎn)化為求數(shù)組中的和最大的連續(xù)子序列?相鄰兩個(gè)數(shù)作差即可,這樣的話子序列的和就是我們?cè)谧有蛄虚_(kāi)始賣(mài)出股票,在子序列最后買(mǎi)回股票所能得到的收益。

那么什么是Kadane's Algorithm呢?

kadane算法利用了數(shù)學(xué)歸納法的思想。簡(jiǎn)單來(lái)講就是,隨意給你一個(gè)現(xiàn)成的數(shù)組,比如說(shuō)?2, 1, ?3, 4, ?1, 2, 1, ?5, 4,讓你求其中的最大子列和,并不是容易的事情。但如果我們能從第一個(gè)數(shù)開(kāi)始,隨著數(shù)組的擴(kuò)充,始終對(duì)其最大子列和保持跟蹤,就可以輕易的求出任意一個(gè)數(shù)組的最大子列和。換言之,長(zhǎng)度n的數(shù)組我們不會(huì)求,長(zhǎng)度為一的總能算出來(lái)吧?長(zhǎng)度為一的算出來(lái)了,二也就能算出來(lái),二算出來(lái)了,三就能算出來(lái),以此類(lèi)推,用這種根據(jù)i求i+1的思想,我們就能達(dá)到最終目的。

詳細(xì)的分析一下,往一個(gè)長(zhǎng)度為i的數(shù)組后面插入第i+1個(gè)數(shù),這時(shí),數(shù)組的最大子列只有兩種情況,要么包括第i+1個(gè)數(shù),要么不包括第i+1個(gè)數(shù)。即:

maxsubarraum = max(以第i+1個(gè)數(shù)結(jié)尾的子列和, 不以第i+1個(gè)數(shù)結(jié)尾的子列和)。*

先計(jì)算前者,以第i+1個(gè)數(shù)結(jié)尾的子列和怎么算呢?很簡(jiǎn)單,要么它是以第i個(gè)數(shù)結(jié)尾的子列作為前綴,要么它不以之作為前綴。假設(shè)第i+1個(gè)數(shù)為x,那么:

以第i+1個(gè)數(shù)結(jié)尾的子列和 = max(x,以第i個(gè)數(shù)結(jié)尾的子列和+x) (1)。

再計(jì)算后者,也就是不以第i+1個(gè)數(shù)結(jié)尾的子列和。這啥意思呢?其實(shí)就是插入第i+1個(gè)數(shù)之前的數(shù)組的最大子列和嘛。我們的數(shù)學(xué)歸納思想也就體現(xiàn)在這里,如果你還看不明白,我們將*式改寫(xiě):

數(shù)列長(zhǎng)度i+1的最大子列和 = max(以第i+1個(gè)數(shù)結(jié)尾的子列和, 數(shù)列長(zhǎng)度i的最大子列和)。(2)

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

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

這道題的描述如下:

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

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

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

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

解法1

這個(gè)問(wèn)題可以轉(zhuǎn)換成Best Time to Buy and Sell Stock I問(wèn)題。

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

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

不同于Best Time to Buy and Sell Stock I中定義的初始狀態(tài)A[i]表示第i天賣(mài)出掙的最大數(shù)目的錢(qián),這個(gè)更進(jìn)一步直接定義A[i]表示前i天賺的最大數(shù)目的錢(qián)。minPrice表示從第0天到第i-1天中的最低價(jià)格。

A[0]=0。(初始狀態(tài))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]).

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

maxPrice表示第i+1天到n天的最高價(jià)格。B[n]=0。(初始狀態(tài))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天為分割點(diǎn)能賺的最多數(shù)目的錢(qián)為A[i]+B[i]問(wèn)題的解為max{A[i]+B[i]}。0<=i<=n。時(shí)間復(fù)雜度是O(N),空間復(fù)雜度是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

第二種解法的核心是假設(shè)手上最開(kāi)始只有0元錢(qián),那么如果買(mǎi)入股票的價(jià)格為price,手上的錢(qián)需要減去這個(gè)price,如果賣(mài)出股票的價(jià)格為price,手上的錢(qián)需要加上這個(gè)price。

因此我們定義了4個(gè)狀態(tài):

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

那么假設(shè)我們?cè)诘趇天時(shí)第二次賣(mài)出股票,我們賣(mài)出股票可以獲得Buy2[i-1]+prices[i]的錢(qián),假設(shè)在第i天前已經(jīng)完成了兩筆交易,那么我們最多的錢(qián)是Sell2[i-1],因此Sell2[i]=max{Sell2[i-1],Buy2[i-1]+prices[I]}同樣的道理,假設(shè)我們?cè)诘趇天時(shí)第二次買(mǎi)入股票,我們手中的錢(qián)是Sell[i-1]-prices[i],假設(shè)我們?cè)诘趇天錢(qián)已經(jīng)賣(mài)出了兩次股票,那么我們最多的錢(qián)是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]}

可以發(fā)現(xiàn)上面四個(gè)狀態(tài)都是只與前一個(gè)狀態(tài)有關(guān),所以可以不使用數(shù)組而是使用變量來(lái)存儲(chǔ)即可。


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1804

    文章

    48449

    瀏覽量

    244883

原文標(biāo)題:如何買(mǎi)賣(mài)股票?不要慌,我有妙招!

文章出處:【微信號(hào):atleadai,微信公眾號(hào):LeadAI OpenLab】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    **【技術(shù)干貨】Nordic nRF54系列芯片:傳感器數(shù)據(jù)采集與AI機(jī)器學(xué)習(xí)的完美結(jié)合**

    【技術(shù)干貨】nRF54系列芯片:傳感器數(shù)據(jù)采集與AI機(jī)器學(xué)習(xí)的完美結(jié)合 近期收到不少伙伴咨詢nRF54系列芯片的應(yīng)用與技術(shù)細(xì)節(jié),今天我們整理幾個(gè)核心問(wèn)題與解答,帶你快速掌握如何在nRF54上部署AI
    發(fā)表于 04-01 00:00

    基于網(wǎng)絡(luò)共識(shí)的股票價(jià)格行為數(shù)據(jù)挖掘(英文

    【作者】:賴興瑞;張東站;段江嬌;【來(lái)源】:《心智與計(jì)算》2010年01期【摘要】:股票價(jià)格行為數(shù)據(jù)挖掘激發(fā)了計(jì)算機(jī)科學(xué)、機(jī)器學(xué)習(xí)及其他領(lǐng)域研究的廣泛關(guān)注。然而,由于股票價(jià)格本身的不確定性和股市
    發(fā)表于 04-24 09:56

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

    強(qiáng)勁的增長(zhǎng)勢(shì)頭。  伴隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)的發(fā)展,股票APP軟件開(kāi)發(fā)也進(jìn)入了全新的階段。各種股票APP軟件更是層出不窮,如同花順、招商致遠(yuǎn)。不過(guò)股票APP要想贏得客戶信賴,個(gè)性化體驗(yàn)是制勝關(guān)鍵!
    發(fā)表于 02-13 19:16

    股票數(shù)據(jù)如何分析

    股票數(shù)據(jù)分析
    發(fā)表于 05-29 10:49

    2018人工智能股票龍頭

    2018人工智能股票龍頭,2019-01-07 10:49:43近年來(lái)中國(guó)的人工智能行業(yè)可以說(shuō)是***,一邊是像云從科技、商湯科技這些持續(xù)獲得融資的AI巨頭,一邊是AI創(chuàng)業(yè)公司的密集倒閉,根據(jù)
    發(fā)表于 07-28 07:40

    經(jīng)音頻電話系統(tǒng)處理現(xiàn)金轉(zhuǎn)帳及股票買(mǎi)賣(mài)授權(quán)及補(bǔ)償協(xié)議

    經(jīng)音頻電話系統(tǒng)處理現(xiàn)金轉(zhuǎn)帳及股票買(mǎi)賣(mài)授權(quán)及補(bǔ)償協(xié)議
    發(fā)表于 07-13 20:45 ?16次下載

    節(jié)約電池有妙招

    節(jié)約電池有妙招  少剎車(chē) 勻速騎 起步人力助騎        在日前揚(yáng)州市某單位舉辦的電動(dòng)車(chē)極限挑戰(zhàn)賽上,不同品牌的電
    發(fā)表于 11-10 16:44 ?466次閱讀

    手機(jī)=定時(shí)炸彈?專(zhuān)家支招讓您手機(jī)防竊聽(tīng)

    手機(jī)=定時(shí)炸彈?專(zhuān)家支招讓您手機(jī)防竊聽(tīng)
    發(fā)表于 12-28 08:56 ?677次閱讀

    馬云的話絕對(duì)可信 終于知道馬云為什么不讓年輕人去買(mǎi)房!原來(lái)如此

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

    終于知道手機(jī)AI芯片的作用是什么

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

    樂(lè)視網(wǎng)將進(jìn)入停牌狀態(tài)——這是股票暫停上市程序的前奏

    樂(lè)視網(wǎng)明確表示,公司預(yù)約的年報(bào)披露日期為4月26日,如果公司觸及《創(chuàng)業(yè)板股票上市規(guī)則》(2018年11月修訂)13.1.1相關(guān)規(guī)定,即經(jīng)審計(jì)后上市公司2018年度歸母凈資產(chǎn)為負(fù),公司股票將被暫停上市,暨公司股票將于4月26日開(kāi)市
    的頭像 發(fā)表于 04-26 11:40 ?3033次閱讀

    如何快速設(shè)計(jì)脈搏血氧儀?德州儀器來(lái)支招

    如何快速設(shè)計(jì)脈搏血氧儀?德州儀器來(lái)支招
    發(fā)表于 10-31 08:23 ?6次下載
    如何快速設(shè)計(jì)脈搏血氧儀?德州儀器來(lái)<b class='flag-5'>支招</b>!

    干貨 | 數(shù)字萬(wàn)用表四種妙用方法,你知道么?

    干貨 | 數(shù)字萬(wàn)用表四種妙用方法,你知道么?
    的頭像 發(fā)表于 01-05 09:52 ?1276次閱讀

    比起各式各樣的AI應(yīng)用,我們可能更需要AI for OS

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

    氣象監(jiān)測(cè)站——?dú)庀笥^測(cè)有妙招

    氣象監(jiān)測(cè)站——?dú)庀笥^測(cè)有妙招
    的頭像 發(fā)表于 09-04 09:47 ?582次閱讀
    主站蜘蛛池模板: 色网站免费在线观看 | 国产国产人免费人成免费视频 | 大杳蕉伊人狼人久久一本线 | 婷婷中文字幕 | 国产午夜毛片一区二区三区 | vr性资源在线观看 | 69japanese日本100 69ww免费视频播放器 | 成人毛片一区二区三区 | 黄色福利小视频 | 久久亚洲aⅴ精品网站婷婷 久久亚洲成人 | 福利一区在线观看 | 国产午夜精品久久久久九九 | 黄网免费| 特级一级毛片视频免费观看 | 一级片免费在线 | 狠狠干欧美 | 高清一级| 三级免费黄录像 | 久久午夜影院 | 天天操天天爱天天干 | 在线理论视频 | 久久精品香蕉视频 | 性xxxxbbbb在线 | 在线观看国产精美视频 | 婷婷操| 与子乱刺激对白在线播放 | 久久99热不卡精品免费观看 | 久久综合九色综合欧洲 | 天天做天天爱天天操 | 在线二区| 蕾丝视频成人★在线观看 | 日本高清色图 | 欧美无遮挡国产欧美另类 | 新版天堂资源中文8在线 | 日本又粗又长一进一出抽搐 | 婷婷在线观看网站 | 亚洲电影一区二区三区 | 水果视频色版 | 一区二区三区视频在线观看 | 人人做人人爽人人爱秋霞影视 | 亚洲五月六月丁香激情 |