最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)LeetCode(309.買(mǎi)股票的最佳時(shí)間含冷凍期)

 更新時(shí)間:2021年08月04日 16:43:30   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(309.買(mǎi)股票的最佳時(shí)間含冷凍期),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 309.Best Time to Buy and Sell Stock with Cooldown 買(mǎi)股票的最佳時(shí)間含冷凍期

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times) with the following restrictions:

  • You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
  • After you sell your stock, you cannot buy stock on next day. (ie, cooldown 1 day)

Example:

prices = [1, 2, 3, 0, 2]
maxProfit = 3
transactions = [buy, sell, cooldown, buy, sell]

這道題又是關(guān)于買(mǎi)賣(mài)股票的問(wèn)題,之前有四道類(lèi)似的題目Best Time to Buy and Sell Stock 買(mǎi)賣(mài)股票的最佳時(shí)間Best Time to Buy and Sell Stock II 買(mǎi)股票的最佳時(shí)間之二, Best Time to Buy and Sell Stock III 買(mǎi)股票的最佳時(shí)間之三Best Time to Buy and Sell Stock IV 買(mǎi)賣(mài)股票的最佳時(shí)間之四。而這道題與上面這些不同之處在于加入了一個(gè)冷凍期Cooldown之說(shuō),就是如果某天賣(mài)了股票,那么第二天不能買(mǎi)股票,有一天的冷凍期。根據(jù)他的解法,此題需要維護(hù)三個(gè)一維數(shù)組buy, sell,和rest。其中:

buy[i]表示在第i天之前最后一個(gè)操作是買(mǎi),此時(shí)的最大收益。

sell[i]表示在第i天之前最后一個(gè)操作是賣(mài),此時(shí)的最大收益。

rest[i]表示在第i天之前最后一個(gè)操作是冷凍期,此時(shí)的最大收益。

我們寫(xiě)出遞推式為:

buy[i]  = max(rest[i-1] - price, buy[i-1]) 
sell[i] = max(buy[i-1] + price, sell[i-1])
rest[i] = max(sell[i-1], buy[i-1], rest[i-1])

上述遞推式很好的表示了在買(mǎi)之前有冷凍期,買(mǎi)之前要賣(mài)掉之前的股票。一個(gè)小技巧是如何保證[buy, rest, buy]的情況不會(huì)出現(xiàn),這是由于buy[i] <= rest[i], 即rest[i] = max(sell[i-1], rest[i-1]),這保證了[buy, rest, buy]不會(huì)出現(xiàn)。

另外,由于冷凍期的存在,我們可以得出rest[i] = sell[i-1],這樣,我們可以將上面三個(gè)遞推式精簡(jiǎn)到兩個(gè):

buy[i]  = max(sell[i-2] - price, buy[i-1]) 
sell[i] = max(buy[i-1] + price, sell[i-1])

我們還可以做進(jìn)一步優(yōu)化,由于i只依賴(lài)于i-1和i-2,所以我們可以在O(1)的空間復(fù)雜度完成算法,參見(jiàn)代碼如下:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int buy = INT_MIN, pre_buy = 0, sell = 0, pre_sell = 0;
        for (int price : prices) {
            pre_buy = buy;
            buy = max(pre_sell - price, pre_buy);
            pre_sell = sell;
            sell = max(pre_buy + price, pre_sell);
        }
        return sell;
    }
};

類(lèi)似題目:

Best Time to Buy and Sell Stock IV

Best Time to Buy and Sell Stock III

Best Time to Buy and Sell Stock II

Best Time to Buy and Sell Stock

參考資料:

https://leetcode.com/discuss/71354/share-my-thinking-process

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(309.買(mǎi)股票的最佳時(shí)間含冷凍期)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)買(mǎi)股票的最佳時(shí)間含冷凍期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++位操作實(shí)戰(zhàn)掩碼、提取與組裝

    C++位操作實(shí)戰(zhàn)掩碼、提取與組裝

    在C++編程中,位操作是基礎(chǔ)而強(qiáng)大的技術(shù),允許在二進(jìn)制級(jí)別上操作數(shù)據(jù),對(duì)性能優(yōu)化、內(nèi)存節(jié)省和底層硬件控制至關(guān)重要,文章探討了掩碼操作、字節(jié)提取與組裝等技術(shù),并介紹了bitset類(lèi)模板的使用,幫助處理二進(jìn)制數(shù)據(jù),通過(guò)實(shí)例解析如何設(shè)置、清除、檢查特定位
    2024-10-10
  • 深入剖析C++中的struct結(jié)構(gòu)體字節(jié)對(duì)齊

    深入剖析C++中的struct結(jié)構(gòu)體字節(jié)對(duì)齊

    要求數(shù)據(jù)內(nèi)存的起始地址的值是某個(gè)數(shù)k的倍數(shù),這就是所謂的內(nèi)存對(duì)齊,本文就來(lái)深入剖析C++中的struct結(jié)構(gòu)體字節(jié)對(duì)齊,需要的朋友可以參考下
    2016-05-05
  • C++實(shí)現(xiàn)隨機(jī)數(shù)生成的現(xiàn)代化封裝

    C++實(shí)現(xiàn)隨機(jī)數(shù)生成的現(xiàn)代化封裝

    在現(xiàn)代?C++?中,隨機(jī)數(shù)生成是許多程序設(shè)計(jì)中不可或缺的部分,例如游戲開(kāi)發(fā)、算法設(shè)計(jì)、統(tǒng)計(jì)模擬等,本文將以一個(gè)封裝好的隨機(jī)工具類(lèi)?Random?為例,深入剖析其功能的實(shí)現(xiàn)與使用,并引入相關(guān)知識(shí),幫助讀者觸類(lèi)旁通,掌握?C++?隨機(jī)數(shù)的核心技巧
    2024-11-11
  • C++實(shí)現(xiàn)學(xué)校人員管理系統(tǒng)

    C++實(shí)現(xiàn)學(xué)校人員管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)校人員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實(shí)現(xiàn)LeetCode(27.移除元素)

    C++實(shí)現(xiàn)LeetCode(27.移除元素)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(27.移除元素),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言中((type *)0) 和(type *0)區(qū)別小結(jié)

    C語(yǔ)言中((type *)0) 和(type *0)區(qū)別小結(jié)

    ((type *)0)?和?(type *0)?在 C 和 C++ 中有不同的含義和用途,本文主要介紹了C語(yǔ)言中((type *)0) 和(type *0)區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • C++并查集常用操作

    C++并查集常用操作

    并查集 是一種樹(shù)型的數(shù)據(jù)結(jié)構(gòu),用于處理一些不相加集合的合并和查詢(xún)問(wèn)題。本文給大家分享C++并查集常用操作及算法實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • 數(shù)據(jù)結(jié)構(gòu)之伸展樹(shù)詳解

    數(shù)據(jù)結(jié)構(gòu)之伸展樹(shù)詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之伸展樹(shù)詳解,本文對(duì)伸展樹(shù)(Splay Tree)的單旋轉(zhuǎn)操作、一字型旋轉(zhuǎn)、之字形旋轉(zhuǎn)區(qū)間操作等理論知識(shí)做了講解,并給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-08-08
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能(1)

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能(1)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能的第一部分,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Qt中QStackedWidget控件的實(shí)現(xiàn)

    Qt中QStackedWidget控件的實(shí)現(xiàn)

    QStackedWidget是Qt框架中一個(gè)非常有用的控件,它允許你堆疊多個(gè)窗口部件,本文主要介紹了Qt中QStackedWidget控件的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04

最新評(píng)論

松溪县| 永顺县| 舞阳县| 云霄县| 页游| 伊金霍洛旗| 响水县| 金阳县| 三门峡市| 出国| 百色市| 云安县| 雷山县| 韶山市| 澄迈县| 瓮安县| 湖州市| 汤原县| 广东省| 图木舒克市| 桃源县| 黔南| 盐山县| 海阳市| 林周县| 瑞丽市| 九龙城区| 大洼县| 晋中市| 曲阳县| 社会| 金平| 措勤县| 个旧市| 昌平区| 禄丰县| 建水县| 威宁| 嘉鱼县| 北碚区| 卢氏县|