假設我有一個陣列:
[44, 30, 24, 32, 35, 30, 40, 38, 15]
在這里,每個數字代表某一天的股票價值。我想找出在 x 日買入股票并在 y 日賣出股票所能獲得的最大利潤。
在這種情況下,函式將回傳16,因為在指數 2 時股票價值 24 美元,而在指數 6 時股票價值 40 美元。
這是我的嘗試,但是我不知道如何只查看串列中的連續元素
x = [5, 8, 15, 19] # total scores
y = [x[i] - x[i-1] if i else x[i] for i in range(len(x))] # round scores
print(y)
# output
[5, 3, 7, 4]
uj5u.com熱心網友回復:
您可以構建一個字典,然后使用max. 這個想法是找到每個專案的最大回報(存盤為值)并找到具有最高回報的值的索引:
tmp = {idx: max(j-i for j in lst[idx:]) for idx, i in enumerate(lst)}
out = max(tmp, key = tmp.get)
輸出:
2
如果你只想要最高的回報,我們甚至不需要字典:
out = max(max(j-i for j in lst[idx:]) for idx, i in enumerate(lst))
輸出:
16
uj5u.com熱心網友回復:
您可以通過這種方式查看連續元素。
...
for i in range(len(x):
for j in range(i 1, len(x)):
...
這是作業的:
def max_difference(price_list):
days = len(price_list)
max_diff=0
for i in range(days-1):
for j in range(i 1, days):
diff = price_list[j]-price_list[i]
if(diff > max_diff):
max_diff=diff
return max_diff
prices=[10, 30, 40, 32, 35, 30, 40, 38, 15]
print(max_difference(prices))
uj5u.com熱心網友回復:
一旦通過 index i,以除 以外的任何價值購買股票都不是最優的min_{1 <= j <= i} A[j],因此將迄今為止的最小值與現值進行比較就足夠了。
int solve(stock_prices) {
int answer = 0, min_so_far = stock_prices[0];
for (int i = 1; i < n; i) {
answer = max(answer, stock_prices[i] - min_so_far);
min_so_far = min(min_so_far, stock_prices[i]);
}
return answer;
}
與其他兩個解決方案相比,這在線性時間內運行,這兩個解決方案都是二次的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/437293.html
上一篇:JavaScriptn階樹
