源地址
https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_profit/
MaxProfit(最大收益)
一個包含N個元素的數組A, 每個元素表示公司股票的每日價格(美分).
寫一個函數
class Solution {
public int solution(int[] A);
}
返回在這段時間內每份額可能獲得的最大收益(美分). 如果不能獲得任何收益,則返回零. 準確的說,函數應返回
max{0, A[m]−A[k] : 0 ≤ k < m < N }
例如: 指定 N=6,
A[0] = 23171
A[1] = 21011
A[2] = 21123
A[3] = 21366
A[4] = 21013
A[5] = 21367
函數應返回356: 在股票價格爲210.11美元時買進, 而在213.67.美元時賣出, 則獲得最大收益爲3.56美元. 假設數組A可能包含上百兆字節.
假定:
- N 是 [0…400,000] 內的 整數;
- 數組 A 每個元素是取值範圍 [0…200,000] 內的 整數 .
第一步
按照時間順序進行買入和賣出,所以按照時間順序遍歷.
- 第一天的價格設爲歷史地點
- 如果比歷史低點高,那麼計算收益,
- 如果比歷史低點低,那麼當天價格設置爲歷史低點,重新計算收益
每次只保留最大收益
public int solution(int[] A) {
int N = A.length;
if (N == 0) {
return 0;
}
int level = A[0];
int profit = 0;
for (int i = 1; i < N; i++) {
if (A[i] >= level) {
profit = Math.max(profit, A[i] - level);
} else {
level = A[i];
}
}
return profit;
}