[TS LeetCode] 122. Best Time to Buy and Sell Stock II+貪婪演算法

更新於 發佈於 閱讀時間約 4 分鐘


題目摘要

給定一個整數陣列 `prices`,其中 `prices[i]` 代表第 `i` 天的股票價格。在每一天,你可以決定買入和/或賣出股票。然而,你同一時間只能擁有至多一股股票。你可以在同一天內買入然後立刻賣出股票。找出並返回你可以實現的最大利潤。


貪婪演算法(Greedy algorithm)

  • 貪婪演算法通常用於優化問題,其中需要在一組可能的選擇中選擇最佳解決方案,以最大化或最小化某個目標函數。
  • 貪婪演算法基於當前情況下的最佳選擇,而不關心全局的最優解。
  • 在每一步,貪婪演算法都選擇當前情況下的最佳選擇,並且不會回頭更改之前的選擇。

特色

  1. 局部最佳選擇:貪婪演算法選擇的是局部最佳選擇,即在每一步都儘量達到最有利的結果,而不考慮全局最優解。這使得貪婪演算法容易實現和理解。
  2. 無回頭修改:一旦貪婪演算法做出了選擇,就不會回頭更改。這意味著它不考慮之前的決策對未來決策的影響,因此通常不需要記錄整個決策過程的歷史。
  3. 適用性:貪婪演算法適用於具有最佳子結構性質和無後效性的問題。最佳子結構性質表示全局最優解可以由局部最佳解組合而成,而無後效性表示過去的決策不會影響未來的決策。
  4. 效率:貪婪演算法通常具有較低的計算成本和更快的執行速度,因為它僅關注當前情況。
  5. 不保證最優解:貪婪演算法不保證找到全局最優解,因為它忽略了全局的考慮。它可能會找到一個接近最優解的解,但不一定是最佳的。


總而言之,貪婪演算法是一種簡單而有效的問題解決方法,特別適用於某些問題,其中局部最佳選擇能夠導致全局最優解。然而,它不適用於所有問題,且無法保證最優解,因此在應用時需要謹慎考慮問題的特性和要求。


解題思路

  1. 問題理解:首先,仔細閱讀題目,了解它要求我們根據每天的股票價格,找出最佳的交易策略,以最大化利潤。關鍵是我們可以在同一天內買入和賣出,並且可以多次進行交易。
  2. 貪婪策略:明確了解貪婪策略的應用,即在每一天只要價格上升,就執行交易,以實現價格增長的利潤。我們不需要等到價格達到最高點才賣出。
  3. 演算法實現:遍歷股票價格陣列,檢查相鄰兩天的價格。如果今天的價格高於昨天,我們執行買入和賣出操作,並將利潤累積到最終的最大利潤中。
  4. 程式碼實現:將這個貪婪策略轉化為程式碼。使用一個迴圈來遍歷價格陣列,並使用條件語句檢查價格的變化。如果價格上升,就進行交易操作,並更新最大利潤。


function maxProfit(prices: number[]): number {
let maxProfit: number = 0;

for (let i = 1; i < prices.length; i++) {
if (prices[i - 1] < prices[i]) {
maxProfit += prices[i] - prices[i - 1];
}
}
return maxProfit;
};


貪婪演算法的應用

在這個問題中,貪婪策略是基於當前價格是否上升,來選擇買入和賣出操作,以實現利潤最大化。如果當前一天的股價高於前一天,則可以考慮在前一天購入並當天賣出以獲得利潤。這是因為你可以在同一天內買入然後立刻賣出,並從價格上升中獲得利潤。如果價格下降或保持不變,則不執行交易操作,因為這樣可能不會增加利潤。


範例

假設股價變化如下: [7, 1, 5, 3, 6, 4],根據貪婪策略,可以執行以下操作:

  • 在第 2 天(價格 1)買入,第 3 天(價格 5)賣出,獲得利潤 4。
  • 在第 4 天(價格 3)買入,第 5 天(價格 6)賣出,獲得利潤 3。

總利潤為 4 + 3 = 7,這是最大的利潤。


結論

因此,在這個問題中,貪婪演算法的應用是通過根據當前價格的變化來執行交易操作,而不需要預測未來價格變化趨勢,以實現最大化的利潤。這個方法在簡單且有效的情況下非常適用,並且在實務應用中具有廣泛的用途。


相關連結



留言
avatar-img
留言分享你的想法!
avatar-img
毛怪的沙龍
3會員
8內容數
"TypeScript LeetCode" 以 TypeScript 為工具,深入解析 LeetCode 上的算法和資料結構問題,提供清晰解釋和程式碼示範,幫助您精進 TypeScript 技能,解決挑戰性問題,無論您的程式開發水平如何。讓我們一同鑽研、提升,迎接算法挑戰,成長技術專長!,快速提高您的技能水平
毛怪的沙龍的其他內容
2023/10/19
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
Thumbnail
2023/10/19
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
Thumbnail
2023/10/16
題目摘要: 在這篇文章中,我們將討論如何使用摩爾投票算法找出一個陣列中的「主要元素」。主要元素指的是在陣列中出現次數超過一半的元素,並且我們可以確定它一定存在於陣列中。這個算法的核心思想和應用將在本文中被詳細介紹。 題目知識點: 主要元素的定義和重要性。 摩爾投票算法的工作原理和優點。 先備知識
Thumbnail
2023/10/16
題目摘要: 在這篇文章中,我們將討論如何使用摩爾投票算法找出一個陣列中的「主要元素」。主要元素指的是在陣列中出現次數超過一半的元素,並且我們可以確定它一定存在於陣列中。這個算法的核心思想和應用將在本文中被詳細介紹。 題目知識點: 主要元素的定義和重要性。 摩爾投票算法的工作原理和優點。 先備知識
Thumbnail
2023/10/12
重要知識點: 1. TypeScript 全局擴展,使所有陣列都能使用 groupBy 方法。 2. 利用泛型創建彈性函數,提高代碼可重用性。 3. 迭代陣列中的元素,實現遍歷和處理功能。 4. 物件的鍵值對操作,用於建立以函數輸出為鍵的物件。
Thumbnail
2023/10/12
重要知識點: 1. TypeScript 全局擴展,使所有陣列都能使用 groupBy 方法。 2. 利用泛型創建彈性函數,提高代碼可重用性。 3. 迭代陣列中的元素,實現遍歷和處理功能。 4. 物件的鍵值對操作,用於建立以函數輸出為鍵的物件。
Thumbnail
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
題目會給我們一個陣列prices,裡面的數值代表每一個交易日的股票股價。 題目給我們一次做多的機會,也就是A交易日買進,B交易日賣出,請問最大獲利是多少?(此處不需要考慮現實面的交易稅、手續費...等因素) 如果無法獲利,則題目要求return 0。
Thumbnail
題目會給我們一個陣列prices,裡面的數值代表每一個交易日的股票股價。 題目給我們一次做多的機會,也就是A交易日買進,B交易日賣出,請問最大獲利是多少?(此處不需要考慮現實面的交易稅、手續費...等因素) 如果無法獲利,則題目要求return 0。
Thumbnail
題目摘要 給定一個整數陣列 `prices`,其中 `prices[i]` 代表第 `i` 天的股票價格。在每一天,你可以決定買入和/或賣出股票。然而,你同一時間只能擁有至多一股股票。你可以在同一天內買入然後立刻賣出股票。找出並返回你可以實現的最大利潤。
Thumbnail
題目摘要 給定一個整數陣列 `prices`,其中 `prices[i]` 代表第 `i` 天的股票價格。在每一天,你可以決定買入和/或賣出股票。然而,你同一時間只能擁有至多一股股票。你可以在同一天內買入然後立刻賣出股票。找出並返回你可以實現的最大利潤。
Thumbnail
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
Thumbnail
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
Thumbnail
在任何領域一定有它的遊戲規則、有屬於它的有效率方法;在股市採取這樣的交易攻略必然是一定贏!!本投資心法至為重要!絕對值得一讀!! 但如果您追求的是"短期"、"每次"都是"100%"、"百分之百"、"準確"、"精準"總是能一定贏的話...很抱歉,本篇文章與阿Sir的專欄系列文並不適合您閱讀!!
Thumbnail
在任何領域一定有它的遊戲規則、有屬於它的有效率方法;在股市採取這樣的交易攻略必然是一定贏!!本投資心法至為重要!絕對值得一讀!! 但如果您追求的是"短期"、"每次"都是"100%"、"百分之百"、"準確"、"精準"總是能一定贏的話...很抱歉,本篇文章與阿Sir的專欄系列文並不適合您閱讀!!
Thumbnail
股市裡充斥著各式各樣的騙子,只有『成交量』是唯一的例外。華爾街名言 文章重點整理 1. 看懂價量關係,掌握對的時機,成功就在不遠處。 2. 那些有關股價上漲下跌,很多投資人都知道的小秘密。 3. 瞭解橫盤震盪階段支撐和壓力。 4. 不同量價組合,各種量價組合的實例分析。
Thumbnail
股市裡充斥著各式各樣的騙子,只有『成交量』是唯一的例外。華爾街名言 文章重點整理 1. 看懂價量關係,掌握對的時機,成功就在不遠處。 2. 那些有關股價上漲下跌,很多投資人都知道的小秘密。 3. 瞭解橫盤震盪階段支撐和壓力。 4. 不同量價組合,各種量價組合的實例分析。
Thumbnail
作者Mark Minervini ,取自網路 大家好,我台股小書僮啦!繼續來搬從探路客轉過來的舊文章,今天來分享《超級績效》的一些內容。
Thumbnail
作者Mark Minervini ,取自網路 大家好,我台股小書僮啦!繼續來搬從探路客轉過來的舊文章,今天來分享《超級績效》的一些內容。
Thumbnail
對短線操作的朋友而言,「擇時」是個重要的關鍵,總是希望能透過買低賣高、賺價差來獲利。但對採用中長線投資策略的朋友,其實每天都是可以進場的好時機!
Thumbnail
對短線操作的朋友而言,「擇時」是個重要的關鍵,總是希望能透過買低賣高、賺價差來獲利。但對採用中長線投資策略的朋友,其實每天都是可以進場的好時機!
Thumbnail
什麼是交易策略?簡而言之,交易策略就是當你在交易時,面對不同的價格、情況,所採取的應對進退。 例如:要不要買入?賣出?加碼?停損?追價?用程式交易?用短線當沖?用定期定額?用技術分析?用籌碼分析?用基本分析?這些都是交易策略的一種選擇。 而到底該如何設定交易策略呢?讓我們從五點切入來幫你解答吧!
Thumbnail
什麼是交易策略?簡而言之,交易策略就是當你在交易時,面對不同的價格、情況,所採取的應對進退。 例如:要不要買入?賣出?加碼?停損?追價?用程式交易?用短線當沖?用定期定額?用技術分析?用籌碼分析?用基本分析?這些都是交易策略的一種選擇。 而到底該如何設定交易策略呢?讓我們從五點切入來幫你解答吧!
Thumbnail
這本是超級績效系列的第2集,雖說我在看這本之前想說第1集(心得在此)已經將概念闡述得很完整了,不知道第2集還能寫什麼。 沒想到這本書延續前面第一集的內容,或許沒有帶給我什麼驚天動地的新觀念(因為所有衝擊都在第1集了,沒看過的讀者拜託務必要去將第1集先刷個1次!!!)。
Thumbnail
這本是超級績效系列的第2集,雖說我在看這本之前想說第1集(心得在此)已經將概念闡述得很完整了,不知道第2集還能寫什麼。 沒想到這本書延續前面第一集的內容,或許沒有帶給我什麼驚天動地的新觀念(因為所有衝擊都在第1集了,沒看過的讀者拜託務必要去將第1集先刷個1次!!!)。
Thumbnail
內容摘自尋找超值股第十七章 投資組合與賣出
Thumbnail
內容摘自尋找超值股第十七章 投資組合與賣出
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News