一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - LeetCode-Java:122. 買賣股票的最佳時機Ⅱ

LeetCode-Java:122. 買賣股票的最佳時機Ⅱ

2023-12-04 01:04未知服務器之家 Java教程

題目 給你一個整數數組 prices ,其中 prices[i] 表示某支股票第 i 天的價格。 在每一天,你可以決定是否購買和/或出售股票。你在任何時候 最多 只能持有 一股 股票。你也可以先購買,然后在 同一天 出售。 返回 你能獲得的 最大

題目

給你一個整數數組 prices ,其中 prices[i] 表示某支股票第 i 天的價格。

在每一天,你可以決定是否購買和/或出售股票。你在任何時候 最多 只能持有 一股 股票。你也可以先購買,然后在 同一天 出售。

返回 你能獲得的 最大 利潤

示例 1:

輸入:prices = [7,1,5,3,6,4]
輸出:7
解釋:在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5 - 1 = 4 。
     隨后,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能獲得利潤 = 6 - 3 = 3 。
     總利潤為 4 + 3 = 7 。

示例 2:

輸入:prices = [1,2,3,4,5]
輸出:4
解釋:在第 1 天(股票價格 = 1)的時候買入,在第 5 天 (股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5 - 1 = 4 。
     總利潤為 4 。

示例 3:

輸入:prices = [7,6,4,3,1]
輸出:0
解釋:在這種情況下, 交易無法獲得正利潤,所以不參與交易可以獲得最大利潤,最大利潤為 0 。

這道題目和121的區別在于,購買者同時只能持有一只股票,但是可以交易多次,比如示例1

①暴力解,代碼來源自leetcode,主要思想為遞歸的方式,返回到葉子結點的一次收益,判斷收益是否比之前的最大收益要大,如果更大的話更換存儲的最大收益值。本題遍歷了所有的情況,不適用于數據量較多的情況,故用例時間超出

LeetCode-Java:122. 買賣股票的最佳時機Ⅱ

(圖片來源自leetcode,作者liweiwei1419)

class Solution {
    private int maxprofit;
    public int maxProfit(int[] prices) {
        if(prices.length<2) return 0;
        this.maxprofit=0;
        dfs(prices,0,0,maxprofit);
        return this.maxprofit;
    }
    private void dfs(int[] prices,int index,int status,int profit){
        //各個元素含義:價格數組,當前下標,是否有股票,當前收益
        if(index==prices.length){
            this.maxprofit=Math.max(this.maxprofit,profit);//取當前收益和歷史最大收益二者之間的最大值
            return;
        }
        dfs(prices,index+1,status,profit);//深度優先搜索,對應圖當中所有樹取左邊的結果
        if(status==0){
            //如果沒有購入的話,可以考慮購入一下,購入的話就得減去當日價格,然后數組+1指向下一層
            dfs(prices,index+1,1,profit-prices[index]);
        }
        else{
            //如果已經購入,可以考慮賣出一下,賣出+當日價格,然后數組+1指向下一層
            dfs(prices,index+1,0,profit+prices[index]);
        }
    }
}

②動態規劃,二維數組,題解思路來源leetcode,創建一個二維數組,超過28.33%的用戶

二維數組a[i][j]表示為第i狀態為j的最大收益情況(j表示是否持股,0不持股,1持股)

class Solution {
    private int maxprofit;
    public int maxProfit(int[] prices) {
        if(prices.length<2) return 0;
        int [][]dp=new int[prices.length][2];
        dp[0][0]=0;
        dp[0][1]=0-prices[0];
        for(int i=1;i<prices.length;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[prices.length-1][0];//最后一天不持有的情況肯定是最大值
    }
}

③如果前一天買進,今天賣出可以賺錢的話就+

class Solution {
    private int maxprofit;
    public int maxProfit(int[] prices) {
        if(prices.length<2) return 0;
        int max=0;
        for(int i=1;i<prices.length;i++){
            if(prices[i]-prices[i-1]>0){
                max+=prices[i]-prices[i-1];
            }
        }
        return max;
    }
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品乱码高清在线观看 | 99精品视频在线观看免费播放 | 深夜在线观看网站 | 婷婷综合在线 | 欧美四区| 国产成人v爽在线免播放观看 | 亚洲好视频 | 香港论理午夜电影网 | 母性本能在线观看 | 日本人成大片在线 | 亚洲男人天堂网站 | 天堂男人在线 | 欧美色在线 | 精品无人区麻豆乱码1区2 | 亚洲欧美日韩中文高清一 | 99久久精品无码一区二区毛片 | 久久亚洲一级α片 | 日本中文字幕在线视频站 | 无码精品一区二区三区免费视频 | 精品国产美女福利在线 | 国产91免费在线 | 国产福利片在线 | 韩国三级在线播放 | pppd在线播放| 日韩精品一区二区三区中文在线 | 欧美男同互吃gay老头 | 国产在线观看精品香蕉v区 国产在线观看a | 欧美激烈精交gif动态图18p | 91制片厂制作果冻传媒2021 | 黄色wwwwww| 日本大学jalapsikix | 手机av| 日本热妇 | 肥胖女性大bbbbbb视频女厕 | 四虎影视884aa·com | 亚洲人成网站在线观看青青 | 欧美性xxxxxx爱| 午夜影院一区二区三区 | 日本一道高清不卡免费 | s8sp加密路线和免费路线首页 | 毛片免费全部免费观看 |