日期:2025年10月31日
ZeroJudge 題目連結:f935. 消失的二十年 - 續
解題想法
最低價 min_price 預設為第 0 天的價格,最大獲利 max_proift 預設為 0。依序讀取第 1 天到最後一天的價格 price,如果當天賣出的獲利大於目前的 max_profit,更新 max_profit、最低買價 buy、最高賣價 sell; 如果 price 小於 min_price,更新 min_price。最後如果找不到低於 min_price 的𧶠價,max_profit 等於 0,輸出 0 -1 -1; 反之,輸出 max_profit buy sell。
Python 程式碼
使用時間約為 0.8 s,記憶體約為 126.7 MB,通過測試。
prices = list(map(int, input().split())) # 每天的價格
min_price = prices[0] # 最低價格,預設為第 0 天的價格
max_profit = 0 # 最大獲利,預設為 0
buy = sell = -1 # 最大獲利對應的最低買價、最高賣價,預設為 -1
for price in prices[1:]: # 依序讀取讀取第 1 天到最後一天的價格
if price - min_price > max_profit: # 更高的獲利
max_profit = price - min_price # 更新最大獲利
buy = min_price # 更新最低買價
sell = price # 更新最高賣價
elif price < min_price: # 更低的價格
min_price = price # 更新最低價格
if max_profit == 0: print("0 -1 -1")
else: print(f"{max_profit:d} {buy:d} {sell:d}")
C++ 程式碼
使用時間約為 0.1 s,記憶體約為 84 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int price; scanf("%d", &price);
int min_price = price, max_profit = 0, buy = -1, sell = -1;
while(scanf("%d", &price) != EOF) {
if (price - min_price > max_profit) {
max_profit = price - min_price;
buy = min_price;
sell = price;
} else if (price < min_price) {
min_price = price;
}
}
if (max_profit == 0) printf("0 -1 -1\n");
else printf("%d %d %d\n", max_profit, buy, sell);
return 0;
}
沒有留言:
張貼留言