[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
2會員
8內容數
"TypeScript LeetCode" 以 TypeScript 為工具,深入解析 LeetCode 上的算法和資料結構問題,提供清晰解釋和程式碼示範,幫助您精進 TypeScript 技能,解決挑戰性問題,無論您的程式開發水平如何。讓我們一同鑽研、提升,迎接算法挑戰,成長技術專長!,快速提高您的技能水平
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
毛怪的沙龍 的其他內容
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
題目摘要: 在這篇文章中,我們將討論如何使用摩爾投票算法找出一個陣列中的「主要元素」。主要元素指的是在陣列中出現次數超過一半的元素,並且我們可以確定它一定存在於陣列中。這個算法的核心思想和應用將在本文中被詳細介紹。 題目知識點: 主要元素的定義和重要性。 摩爾投票算法的工作原理和優點。 先備知識
重要知識點: 1. TypeScript 全局擴展,使所有陣列都能使用 groupBy 方法。 2. 利用泛型創建彈性函數,提高代碼可重用性。 3. 迭代陣列中的元素,實現遍歷和處理功能。 4. 物件的鍵值對操作,用於建立以函數輸出為鍵的物件。
這篇文章介紹了如何建立一個時間限制的異步函數,以確保操作在指定時間內完成。 - 知識點包括異步編程、Promise使用、計時器函數和函數引數處理,以及錯誤處理。 - 應用情境包括網頁請求超時控制、前端性能優化和遊戲開發。 - 提高應用程式的可靠性和用戶體驗,確保操作不會花費過長的時間。 - 文章內
[Leetcode 筆記] TypeScript 2715. Timeout Cancellation 了解和有效使用 clearTimeout 和 setTimeout 可以提高JavaScript程序的效率和響應性。
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
題目摘要: 在這篇文章中,我們將討論如何使用摩爾投票算法找出一個陣列中的「主要元素」。主要元素指的是在陣列中出現次數超過一半的元素,並且我們可以確定它一定存在於陣列中。這個算法的核心思想和應用將在本文中被詳細介紹。 題目知識點: 主要元素的定義和重要性。 摩爾投票算法的工作原理和優點。 先備知識
重要知識點: 1. TypeScript 全局擴展,使所有陣列都能使用 groupBy 方法。 2. 利用泛型創建彈性函數,提高代碼可重用性。 3. 迭代陣列中的元素,實現遍歷和處理功能。 4. 物件的鍵值對操作,用於建立以函數輸出為鍵的物件。
這篇文章介紹了如何建立一個時間限制的異步函數,以確保操作在指定時間內完成。 - 知識點包括異步編程、Promise使用、計時器函數和函數引數處理,以及錯誤處理。 - 應用情境包括網頁請求超時控制、前端性能優化和遊戲開發。 - 提高應用程式的可靠性和用戶體驗,確保操作不會花費過長的時間。 - 文章內
[Leetcode 筆記] TypeScript 2715. Timeout Cancellation 了解和有效使用 clearTimeout 和 setTimeout 可以提高JavaScript程序的效率和響應性。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
因為選擇權來不急萎縮,只好用超大幅震盪 昨天頭尾如果波浪抓得好 一天3000點沒問題啊 光夜盤 開盤之後20400~19955 這樣450點 然後19955~20748 800點 20748~20230 又是500點 為啥那麼洗? 就是選擇權太貴了 上週五開始 一跌2700點
Thumbnail
可能包含敏感內容
現在指數比以前15000點還要大了,20000點的空間就會造成更大的震幅。如果單日小於200點的話其實算是小漲或小跌。因為就像是2024.8.2還有2024.7.26都出現大跌千點的行情。這時候選擇權翻倍獲利賺錢的機會就超級大。此刻不把握這種不用挑股票,只需要看指數的漲跌,操作對象只有加權指數,多單
Thumbnail
書名 : 這才是價值投資:長期打敗大盤的贏家系統,從葛拉漢到巴菲特都推崇的選股策略 作者: 全球頂尖策略分析大師詹姆斯•蒙蒂爾 在多頭市場賺錢不稀奇,但遇到空頭市場呢?
Thumbnail
一般人會想像一個完美的時機點、完美的價位,在剛剛好對的時間賣出股票,可以獲利又沒有錯失行情,但這個完美時機點位並不存在,實際是追高殺低還更容易、更符合人性,要買最低賣最高,應該比中樂透還難。
Thumbnail
突破策略以抓取趨勢為目標,常見的操作方式包括股價、均線或成交量的突破。交易判斷基於過去一段時間的價格極值,進出場訊號明確。然而,此策略風險偏高,因此需要注意風險管理。改進方法包括添加趨勢濾網以及使用ATR軌道設定停損,以減少虧損並提高策略的穩定性。
Thumbnail
一、股市交易當沖的利與弊 股市當沖交易是指投資者在短時間內(通常是同一交易日)進行買入和賣出股票以謀求利潤的交易策略。這種交易策略有其利與弊,下面我們來分別討論: 利: 快速賺取利潤:當沖交易讓投資者能夠在短時間內快速賺取利潤,因為他們不需要長期持有股票,而是利用價格波動進行快速交易。 提高流動性:
Thumbnail
本策略入門書介紹了多頭HELP策略,根據市場寬度指標進行多頭趨勢的操作,並可用於機械化交易。透過淺顯易懂的概念,以及具體的交易策略,針對不知如何設計策略的新手提供一點啟發。
Thumbnail
題目敘述 題目會給我們一個陣列prices,裡面的數值代表每一個交易日的股票股價。 每次買入股票時會有一個額外附帶的交易成本fee。 題目讓我們做多,而且不限制交易次數。 題目禁止持有多重部位,也就是說,必須是買賣輪流交替的形式。 比如說 買,買,買 這種方式是不被允許的。 請問最終
Thumbnail
前言 在股票市場中,選擇何時進場往往是獲取成功的關鍵。本系列文透過數據統計的方式,從月、周、日三個維度探索最佳的買進時機。讓我們一同深入瞭解,如何在市場的波動中精確制定買進策略,以獲得更為優異的投資回報。 實驗方式 這一篇會先聚焦在月週期上,分別統計每個月1號~31號所有股票的5日
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
因為選擇權來不急萎縮,只好用超大幅震盪 昨天頭尾如果波浪抓得好 一天3000點沒問題啊 光夜盤 開盤之後20400~19955 這樣450點 然後19955~20748 800點 20748~20230 又是500點 為啥那麼洗? 就是選擇權太貴了 上週五開始 一跌2700點
Thumbnail
可能包含敏感內容
現在指數比以前15000點還要大了,20000點的空間就會造成更大的震幅。如果單日小於200點的話其實算是小漲或小跌。因為就像是2024.8.2還有2024.7.26都出現大跌千點的行情。這時候選擇權翻倍獲利賺錢的機會就超級大。此刻不把握這種不用挑股票,只需要看指數的漲跌,操作對象只有加權指數,多單
Thumbnail
書名 : 這才是價值投資:長期打敗大盤的贏家系統,從葛拉漢到巴菲特都推崇的選股策略 作者: 全球頂尖策略分析大師詹姆斯•蒙蒂爾 在多頭市場賺錢不稀奇,但遇到空頭市場呢?
Thumbnail
一般人會想像一個完美的時機點、完美的價位,在剛剛好對的時間賣出股票,可以獲利又沒有錯失行情,但這個完美時機點位並不存在,實際是追高殺低還更容易、更符合人性,要買最低賣最高,應該比中樂透還難。
Thumbnail
突破策略以抓取趨勢為目標,常見的操作方式包括股價、均線或成交量的突破。交易判斷基於過去一段時間的價格極值,進出場訊號明確。然而,此策略風險偏高,因此需要注意風險管理。改進方法包括添加趨勢濾網以及使用ATR軌道設定停損,以減少虧損並提高策略的穩定性。
Thumbnail
一、股市交易當沖的利與弊 股市當沖交易是指投資者在短時間內(通常是同一交易日)進行買入和賣出股票以謀求利潤的交易策略。這種交易策略有其利與弊,下面我們來分別討論: 利: 快速賺取利潤:當沖交易讓投資者能夠在短時間內快速賺取利潤,因為他們不需要長期持有股票,而是利用價格波動進行快速交易。 提高流動性:
Thumbnail
本策略入門書介紹了多頭HELP策略,根據市場寬度指標進行多頭趨勢的操作,並可用於機械化交易。透過淺顯易懂的概念,以及具體的交易策略,針對不知如何設計策略的新手提供一點啟發。
Thumbnail
題目敘述 題目會給我們一個陣列prices,裡面的數值代表每一個交易日的股票股價。 每次買入股票時會有一個額外附帶的交易成本fee。 題目讓我們做多,而且不限制交易次數。 題目禁止持有多重部位,也就是說,必須是買賣輪流交替的形式。 比如說 買,買,買 這種方式是不被允許的。 請問最終
Thumbnail
前言 在股票市場中,選擇何時進場往往是獲取成功的關鍵。本系列文透過數據統計的方式,從月、周、日三個維度探索最佳的買進時機。讓我們一同深入瞭解,如何在市場的波動中精確制定買進策略,以獲得更為優異的投資回報。 實驗方式 這一篇會先聚焦在月週期上,分別統計每個月1號~31號所有股票的5日