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

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

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;
    }
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费看男女污污完整版 | 九九精品视频在线观看九九 | 毛毛片在线 | 我的男友是消防员在线观看 | 亚洲乱亚洲乱妇41p国产成人 | 好涨好大我快受不了了视频网 | 91香蕉国产在线观看人员 | 国产成人影院 | 91在线永久 | 第一次破女视频国产一级 | 天天爽视频 | 欧美日韩免费一区二区在线观看 | 日本暖暖视频在线观看 | 91亚洲精品国产自在现线 | 青柠网在线观看视频 | 九九99热久久999精品 | 人与蛇boxxⅹ | 含羞草传媒网站免费进入欢迎 | 香蕉久久高清国产精品免费 | 黄网国产| porno中国xxxxx | 青青草国产免费久久久91 | 久9青青cao精品视频在线 | 精品久久久久中文字幕日本 | 乌克兰17一18处交 | 久久无码人妻AV精品一区 | 免费黄色网站视频 | 美女和男生搞基 | 海派甜心完整版在线观看 | 久久久高清国产999尤物 | 色婷婷在线视频 | 欧美午夜视频一区二区三区 | 日韩大片在线 | 女子张腿让男人桶免费 | 日本视频免费在线观看 | 天堂伊人网 | 精品一区二区三区波多野结衣 | 9热在线精品视频观看 | 国产香蕉在线视频 | 任我淫| www.日本视频|