国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法[動(dòng)態(tài)規(guī)劃]---買賣股票最佳時(shí)機(jī)

這篇具有很好參考價(jià)值的文章主要介紹了算法[動(dòng)態(tài)規(guī)劃]---買賣股票最佳時(shí)機(jī)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


1、題目:

給你一個(gè)整數(shù)數(shù)組 prices,其中 prices[i] 表示某支股票第 i 天的價(jià)格。
在每一天,你可以決定是否購(gòu)買和/或出售股票。你在任何時(shí)候最多只能持一股股票。你也可以先購(gòu)買,然后在同一天出售。
返回你能獲得的最大利潤(rùn) 。


2、分析特點(diǎn):

  • 題目要求:在任何時(shí)候最多只能持一股股票 ==> 考慮到「不能同時(shí)參與多筆交易」,因此每天交易結(jié)束后只可能存在手里 有一支股票或者沒有股票的狀態(tài) 。
  • 有和沒有股票的狀態(tài) ==> 動(dòng)態(tài)規(guī)劃

定義狀態(tài)dp[0] 表示第天交易完后手里沒有股票的最大利潤(rùn),d[1] 表示第天交易完后手里持有一支股票的最大利潤(rùn)(從0開始)。

考慮dp[i][0] 的轉(zhuǎn)移方程,如果這一天交易完后手里沒有股票,那么可能的轉(zhuǎn)移狀態(tài)為前一天已經(jīng)沒有股票,即 dp[i-1][0],
或者前一天結(jié)束的時(shí)候手里持有一支股票,即 dp[i-1][1],這時(shí)候我們要將其賣出,并獲得 prices[i] 的收益。
因此為了收益最大化,我們列出如下的轉(zhuǎn)移方程:

算法[動(dòng)態(tài)規(guī)劃]---買賣股票最佳時(shí)機(jī),算法,動(dòng)態(tài)規(guī)劃,狀態(tài),轉(zhuǎn)移方程,數(shù)據(jù)結(jié)構(gòu),java

再來(lái)考慮dp[i][1],按照同樣的方式考慮轉(zhuǎn)移狀態(tài),那么可能的轉(zhuǎn)移狀態(tài)為前一天已經(jīng)持有一支股票,即 dp[i-1][1],或者前一天結(jié)束時(shí)還沒有股票,即 dp[i-1][0],這時(shí)候我們要將其買入,并減少prices[i]的收益。可以列出如下的轉(zhuǎn)移方程:

算法[動(dòng)態(tài)規(guī)劃]---買賣股票最佳時(shí)機(jī),算法,動(dòng)態(tài)規(guī)劃,狀態(tài),轉(zhuǎn)移方程,數(shù)據(jù)結(jié)構(gòu),java

對(duì)于初始狀態(tài),根據(jù)狀態(tài)定義我們可以知道第0天交易結(jié)束的時(shí)候 dp[0][0] =0,dp[0][1]=-prices0。
因此,我們只要從前往后依次計(jì)算狀態(tài)即可。由于全部交易結(jié)束后,持有股票的收益一定低于不持有股票的收益,因此這時(shí)候 dp[n-1][0] 的收益必然是大于 dp[n-1][0] 的,最后的答案即為dp[n-1][0]

3、特點(diǎn):

本題動(dòng)態(tài)規(guī)劃法的思路解析:

因?yàn)?,從最后一天往前看,分成四種情況:

A:前一天有股票,并賣出 – 剩余股票數(shù)0

B:前一天沒有股票,并不買入 – 剩余股票數(shù)0

C:前一天有股票,并不買出 – 剩余股票數(shù)1

D:前一天沒有股票,并買入 – 剩余股票數(shù)1

所以:

  • 當(dāng)剩余股票數(shù)0時(shí),最大的利潤(rùn)是max(A, B)
  • 當(dāng)剩余股票數(shù)1時(shí),最大的利潤(rùn)是max(C, D)

4、代碼:

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int[][] dp = new int[n][2];
        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        for (int i = 1; i < n; ++i) {
            dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i]);
            dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i]);
        }
        return dp[n - 1][0];
    }
}

注意到上面的狀態(tài)轉(zhuǎn)移方程中,每一天的狀態(tài)只與前一天的狀態(tài)有關(guān),而與更早的狀態(tài)都無(wú)關(guān),因此我們不必存儲(chǔ)這些無(wú)關(guān)的狀態(tài),只需要將 dp[i-1][0]和dp[i-1][0] 存放在兩個(gè)變量中,通過(guò)它們計(jì)算出dp[i][0] 和 dp[i][1] 并存回對(duì)應(yīng)的變量,以便于第 i+1 天的狀態(tài)轉(zhuǎn)移即可。

4、復(fù)雜度分析:

  • 時(shí)間復(fù)雜度:O(n),其中 nnn 為數(shù)組的長(zhǎng)度。一共有 2n 個(gè)狀態(tài),每次狀態(tài)轉(zhuǎn)移的時(shí)間復(fù)雜度為 O(1),因此時(shí)間復(fù)雜度為 O(2n)=O(n)。
  • 空間復(fù)雜度:O(n)。我們需要開辟 O(n) 空間存儲(chǔ)動(dòng)態(tài)規(guī)劃中的所有狀態(tài)。如果使用空間優(yōu)化,空間復(fù)雜度可以優(yōu)化至 O(1)。

5、總結(jié):

本題動(dòng)態(tài)規(guī)劃法的思路解析---有股票和沒股票結(jié)合買入賣出的情況考慮狀態(tài)

因?yàn)?,從最后一天往前看,分成四種情況:

A:前一天有股票,并賣出 – 剩余股票數(shù)0

B:前一天沒有股票,并不買入 – 剩余股票數(shù)0

C:前一天有股票,并不買出 – 剩余股票數(shù)1

D:前一天沒有股票,并買入 – 剩余股票數(shù)1

所以:

  • 當(dāng)剩余股票數(shù)0時(shí),最大的利潤(rùn)是max(A, B)
  • 當(dāng)剩余股票數(shù)1時(shí),最大的利潤(rùn)是max(C, D)




如果本文對(duì)你有幫助的話記得給一樂(lè)點(diǎn)個(gè)贊哦,感謝!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-708618.html

到了這里,關(guān)于算法[動(dòng)態(tài)規(guī)劃]---買賣股票最佳時(shí)機(jī)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 動(dòng)態(tài)規(guī)劃——買賣股票的最佳時(shí)機(jī)系列題Ⅱ

    動(dòng)態(tài)規(guī)劃——買賣股票的最佳時(shí)機(jī)系列題Ⅱ

    這一期是和上一期是連著的,包含的題目如下: 這三個(gè)題目所需要的思路是很相近的,先給出第一個(gè)的題目。 給定一個(gè)數(shù)組,它的第 i 個(gè)元素是一支給定的股票在第 i 天的價(jià)格。 設(shè)計(jì)一個(gè)算法來(lái)計(jì)算你所能獲取的最大利潤(rùn)。你最多可以完成?兩筆?交易。 注意:你不能同時(shí)

    2024年01月19日
    瀏覽(26)
  • 【Day53】代碼隨想錄之動(dòng)態(tài)規(guī)劃part10——買賣股票的最佳時(shí)機(jī)、買賣股票的最佳時(shí)機(jī)II

    【Day53】代碼隨想錄之動(dòng)態(tài)規(guī)劃part10——買賣股票的最佳時(shí)機(jī)、買賣股票的最佳時(shí)機(jī)II

    昨天已經(jīng)把打家劫舍的問(wèn)題解決了,最后一個(gè)題目涉及到樹形dp比較難(等到二刷的時(shí)候再重點(diǎn)看下),今天的任務(wù)是解決股票問(wèn)題。 今日任務(wù): 121.買賣股票的最佳時(shí)機(jī) 122.買賣股票的最佳時(shí)機(jī)II Leetcode題目:【121.買賣股票的最佳時(shí)機(jī)】 因?yàn)榇祟}中買賣股票只能買賣一次。

    2024年03月15日
    瀏覽(33)
  • 【學(xué)會(huì)動(dòng)態(tài)規(guī)劃】買賣股票的最佳時(shí)機(jī) IV(18)

    【學(xué)會(huì)動(dòng)態(tài)規(guī)劃】買賣股票的最佳時(shí)機(jī) IV(18)

    目錄 動(dòng)態(tài)規(guī)劃怎么學(xué)? 1. 題目解析 2. 算法原理 1. 狀態(tài)表示 2. 狀態(tài)轉(zhuǎn)移方程 3. 初始化 4. 填表順序 5. 返回值 3. 代碼編寫 寫在最后: 學(xué)習(xí)一個(gè)算法沒有捷徑,更何況是學(xué)習(xí)動(dòng)態(tài)規(guī)劃, 跟我一起刷動(dòng)態(tài)規(guī)劃算法題,一起學(xué)會(huì)動(dòng)態(tài)規(guī)劃! 題目鏈接:188. 買賣股票的最佳時(shí)機(jī) IV

    2024年02月13日
    瀏覽(32)
  • DAY55:動(dòng)態(tài)規(guī)劃(買賣股票的最佳時(shí)機(jī)3)

    DAY55:動(dòng)態(tài)規(guī)劃(買賣股票的最佳時(shí)機(jī)3)

    這道題比上面狀態(tài)更多,是因?yàn)橘u出股票后,你無(wú)法在第二天買入股票 (即冷凍期為1天)。 狀態(tài) 狀態(tài)一:持有股票狀態(tài)(今天買入股票,或者是之前就買入了股票然后沒有操作,一直持有) 不持有股票狀態(tài),這里就有兩種賣出股票狀態(tài) 狀態(tài)二:保持賣出股票的狀態(tài)(兩天前

    2024年02月22日
    瀏覽(28)
  • 【學(xué)會(huì)動(dòng)態(tài)規(guī)劃】買賣股票的最佳時(shí)機(jī) III(17)

    【學(xué)會(huì)動(dòng)態(tài)規(guī)劃】買賣股票的最佳時(shí)機(jī) III(17)

    目錄 動(dòng)態(tài)規(guī)劃怎么學(xué)? 1. 題目解析 2. 算法原理 1. 狀態(tài)表示 2. 狀態(tài)轉(zhuǎn)移方程 3. 初始化 4. 填表順序 5. 返回值 3. 代碼編寫 寫在最后: 學(xué)習(xí)一個(gè)算法沒有捷徑,更何況是學(xué)習(xí)動(dòng)態(tài)規(guī)劃, 跟我一起刷動(dòng)態(tài)規(guī)劃算法題,一起學(xué)會(huì)動(dòng)態(tài)規(guī)劃! 題目鏈接:123. 買賣股票的最佳時(shí)機(jī) II

    2024年02月13日
    瀏覽(24)
  • 【學(xué)會(huì)動(dòng)態(tài)規(guī)劃】最佳買賣股票時(shí)機(jī)含冷凍期(15)

    【學(xué)會(huì)動(dòng)態(tài)規(guī)劃】最佳買賣股票時(shí)機(jī)含冷凍期(15)

    目錄 動(dòng)態(tài)規(guī)劃怎么學(xué)? 1. 題目解析 2. 算法原理 1. 狀態(tài)表示 2. 狀態(tài)轉(zhuǎn)移方程 3. 初始化 4. 填表順序 5. 返回值 3. 代碼編寫 寫在最后: 學(xué)習(xí)一個(gè)算法沒有捷徑,更何況是學(xué)習(xí)動(dòng)態(tài)規(guī)劃, 跟我一起刷動(dòng)態(tài)規(guī)劃算法題,一起學(xué)會(huì)動(dòng)態(tài)規(guī)劃! 題目鏈接:309. 最佳買賣股票時(shí)機(jī)含冷凍

    2024年02月14日
    瀏覽(40)
  • 【學(xué)會(huì)動(dòng)態(tài)規(guī)劃】買賣股票的最佳時(shí)機(jī)含手續(xù)費(fèi)(16)

    【學(xué)會(huì)動(dòng)態(tài)規(guī)劃】買賣股票的最佳時(shí)機(jī)含手續(xù)費(fèi)(16)

    目錄 動(dòng)態(tài)規(guī)劃怎么學(xué)? 1. 題目解析 2. 算法原理 1. 狀態(tài)表示 2. 狀態(tài)轉(zhuǎn)移方程 3. 初始化 4. 填表順序 5. 返回值 3. 代碼編寫 寫在最后: 學(xué)習(xí)一個(gè)算法沒有捷徑,更何況是學(xué)習(xí)動(dòng)態(tài)規(guī)劃, 跟我一起刷動(dòng)態(tài)規(guī)劃算法題,一起學(xué)會(huì)動(dòng)態(tài)規(guī)劃! 這道題也不難理解,主要有兩個(gè)點(diǎn)需要注

    2024年02月14日
    瀏覽(32)
  • 【LeetCode股票買賣系列:309. 最佳買賣股票時(shí)機(jī)含冷凍期 | 暴力遞歸=>記憶化搜索=>動(dòng)態(tài)規(guī)劃】

    【LeetCode股票買賣系列:309. 最佳買賣股票時(shí)機(jī)含冷凍期 | 暴力遞歸=>記憶化搜索=>動(dòng)態(tài)規(guī)劃】

    ?? 算法題 ?? ?? 算法刷題專欄 | 面試必備算法 | 面試高頻算法 ?? ?? 越難的東西,越要努力堅(jiān)持,因?yàn)樗哂泻芨叩膬r(jià)值,算法就是這樣? ?? 作者簡(jiǎn)介:碩風(fēng)和煒,CSDN-Java領(lǐng)域新星創(chuàng)作者??,保研|國(guó)家獎(jiǎng)學(xué)金|高中學(xué)習(xí)JAVA|大學(xué)完善JAVA開發(fā)技術(shù)棧|面試刷題|面經(jīng)八股文

    2024年02月02日
    瀏覽(53)
  • 動(dòng)態(tài)規(guī)劃 Leetcode 714 買賣股票的最佳時(shí)機(jī)含手續(xù)費(fèi)

    Leetcode 714 學(xué)習(xí)記錄自代碼隨想錄 要點(diǎn):1.兩種狀態(tài)持有股票和不持有股票; 2.遞推公式 d p [ i ] [ 0 ] = m a x ( d p [ i ? 1 ] [ 0 ] , d p [ i ? 1 ] [ 1 ] ? p r i c e s [ i ] ) d p [ i ] [ 1 ] = m a x ( d p [ i ? 1 ] [ 1 ] , d p [ i ? 1 ] [ 0 ] + p r i c e s [ i ] ? f e e ) dp[i][0] = max(dp[i-1][0], dp[i-1][1]-prices

    2024年04月09日
    瀏覽(25)
  • 309. 買賣股票的最佳時(shí)機(jī)含冷凍期(leetcode) 動(dòng)態(tài)規(guī)劃思想

    309. 買賣股票的最佳時(shí)機(jī)含冷凍期(leetcode) 動(dòng)態(tài)規(guī)劃思想

    在本文章中,我們將要詳細(xì)介紹一下Leetcode中買賣股票的最佳時(shí)機(jī)含冷凍期相關(guān)的內(nèi)容,本題采用動(dòng)態(tài)規(guī)劃的思想解決 列出dp表,dp表中值的含義是什么 ? ?dp[i]表示第i天之后此時(shí)的最大利潤(rùn) 由于第i天不確定具體狀態(tài),多狀態(tài)dp問(wèn)題 ? ? ?? .dp[i][0]:手中有股票沒有賣出,我

    2024年02月03日
    瀏覽(47)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包