欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

[LeetCode] 309.Best Time to Buy and Sell Stock with Cooldown 買股票的最佳時間含冷凍期

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]

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

buy[i]表示在第i天之前最后一個操作是買,此時的最大收益。

sell[i]表示在第i天之前最后一個操作是賣,此時的最大收益。

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

我們寫出遞推式為:

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])

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

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

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

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

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

類似題目:

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

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

相關文章

  • VS Code遠程連接Linux服務器調試C程序的操作方法

    VS Code遠程連接Linux服務器調試C程序的操作方法

    這篇文章主要介紹了VS Code遠程連接Linux服務器調試C程序的操作方法,打開遠程 Linux 服務器上的文件夾本文以 /root/ 為例,給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • C++ OpenCV實現(xiàn)抖音"藍線挑戰(zhàn)"特效

    C++ OpenCV實現(xiàn)抖音"藍線挑戰(zhàn)"特效

    這篇文章主要介紹了如何使用OpenCV C++ 實現(xiàn)抖音上的特效“藍線挑戰(zhàn)”。文中的示例代碼講解詳細,對我們學習OpenCV有一定的幫助,需要的可以參考一下
    2022-01-01
  • C語言 棧的表示和實現(xiàn)詳細介紹

    C語言 棧的表示和實現(xiàn)詳細介紹

    這篇文章主要介紹了C語言 棧的表示和實現(xiàn)詳細介紹的相關資料,需要的朋友可以參考下
    2016-12-12
  • C語言實現(xiàn)簡易網(wǎng)絡聊天室

    C語言實現(xiàn)簡易網(wǎng)絡聊天室

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易網(wǎng)絡聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 位運算實現(xiàn)十進制轉換為二進制

    位運算實現(xiàn)十進制轉換為二進制

    這篇文章主要介紹了位運算實現(xiàn)十進制轉換為二進制的相關資料,需要的朋友可以參考下
    2015-03-03
  • Qt掃盲篇之QRegularExpression正則匹配總結

    Qt掃盲篇之QRegularExpression正則匹配總結

    QRegularExpression是Qt5.0引進的,修復了很多bug,提高了效率,使用時建議使用QRegularExpression,下面這篇文章主要給大家介紹了關于Qt掃盲篇之QRegularExpression正則匹配的相關資料,需要的朋友可以參考下
    2023-03-03
  • C++實現(xiàn)獲取郵件中的附件

    C++實現(xiàn)獲取郵件中的附件

    這篇文章主要為大家詳細介紹了如何通過C++實現(xiàn)獲取郵件文件中的附件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • C++設計與聲明超詳細講解

    C++設計與聲明超詳細講解

    C++軟件開發(fā)可以理解為設計一系列的類,讓這些類相互使用,最終實現(xiàn)我們所需要的功能。類與類之間的相互關系可以很復雜,也可以很簡單,如何簡單高效的描述類與類之間的關系是設計的難點之一。遵循本文所提供的方法,將會給你一些靈感
    2022-09-09
  • C++ 中const對象與const成員函數(shù)的實例詳解

    C++ 中const對象與const成員函數(shù)的實例詳解

    這篇文章主要介紹了C++ 中const對象與const成員函數(shù)的實例詳解的相關資料,希望通過本文能讓大家徹底掌握該如何使用,需要的朋友可以參考下
    2017-08-08
  • C++如何過濾出字符串的中文(GBK、UTF-8)

    C++如何過濾出字符串的中文(GBK、UTF-8)

    這篇文章主要給大家介紹了關于C++如何過濾出字符串的中文的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07

最新評論