題目摘要
給定一個陣列 prices
,其中 prices[i]
代表第 i
天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
題目知識點
- 利潤最大化
- Math.min() 和 Math.max() 函數的應用
先備知識
在理解此問題之前,應具備以下知識:
- 陣列的基本操作
- 簡單的迴圈和條件語句
應用情境
這個問題模擬了股票交易的情境,特別是在開發股票交易網頁應用程式時可能會用到。以下是一些可能的應用情境:
- 股票交易平台: 在一個股票交易平台的網頁應用中,你可以使用這個演算法幫助用戶找到最佳買入和賣出時機,以最大化他們的利潤。
- 投資組合管理工具: 用於投資組合管理的網頁應用可以使用這個演算法來計算不同股票的最佳交易策略,以幫助投資者做出明智的決策。
- 教育平台: 在股票市場教育課程中,可以使用這個問題來教授如何選擇最佳的買賣時機,並最大化投資利潤。
- 量化交易策略: 用於自動交易的算法可能使用這個演算法來執行買入和賣出決策。
結論
這個問題要求你找到一天買入股票並在未來某一天賣出以獲得最大利潤。解決這個問題的關鍵在於維護一個最低的購買價格,同時計算每一天賣出時的潛在利潤,最終返回最大利潤。
這個問題適用於股票交易相關的應用,並可幫助用戶制定投資策略,以達到最大化利潤的目標。程式碼中使用了 Math.min()
和 Math.max()
函數,這些函數有助於簡化比較和計算的邏輯。
解答
function maxProfit(prices: number[]): number {
let minBuyPrice: number = prices[0];
let maxProfit: number = 0;
for (let i = 1; i < prices.length; i++) {
minBuyPrice = Math.min(minBuyPrice, prices[i]);
maxProfit = Math.max(maxProfit, prices[i] - minBuyPrice)
}
return maxProfit;
};