王廷瑋|數位醫療|智慧醫療: 121. Best Time to Buy and Sell Stock WFU

2024年7月6日 星期六

121. Best Time to Buy and Sell Stock

121. Best Time to Buy and Sell Stock


給定一個數組 prices,其中 prices[i] 是第 i 天的股票價格。

你希望通過選擇某一天買入一隻股票,並選擇將來的一個不同的日子賣出該股票來最大化你的利潤。

返回你能從這筆交易中獲得的最大利潤。如果無法實現任何利潤,返回 0。

範例:

輸入:prices = [7,1,5,3,6,4] 輸出:5 解釋:在第 2 天(價格 = 1)買入,在第 5 天(價格 = 6)賣出,利潤 = 6 - 1 = 5。 請注意,不能在第 2 天買入並在第 1 天賣出,因為必須先買後賣。


Python


from typing import List

class Solution:
def maxProfit(self, prices: List[int]) -> int:
if not prices:
return 0
min_price = float('inf')
max_profit = 0
for price in prices:
if price < min_price:
min_price = price
elif price - min_price > max_profit:
max_profit = price - min_price
return max_profit

27.44MB, 693ms


C++


#include <vector>
#include <algorithm>
using namespace std;

class Solution {
public:
int maxProfit(vector<int>& prices) {
if (prices.empty()) {
return 0;
}
int min_price = INT_MAX;
int max_profit = 0;
for (int price : prices) {
if (price < min_price) {
min_price = price;
} else if (price - min_price > max_profit) {
max_profit = price - min_price;
}
}
return max_profit;
}
};

95.9MB, 89ms


Javascript


/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
if (prices.length === 0) {
return 0;
}
let minPrice = Infinity;
let maxProfit = 0;
for (let i = 0; i < prices.length; i++) {
if (prices[i] < minPrice) {
minPrice = prices[i];
} else if (prices[i] - minPrice > maxProfit) {
maxProfit = prices[i] - minPrice;
}
}
return maxProfit;
};

58.97MB, 76ms