美團筆試題 --- 股票交易日
阿新 • • 發佈:2018-12-16
在股市的交易日中,假設最多可進行兩次買賣(即買和賣的次數均小於等於2),規則是必須一筆成交後進行另一筆(即買-賣-買-賣的順序進行)。給出一天中的股票變化序列,請寫一個程式計算一天可以獲得的最大收益。請採用實踐複雜度低的方法實現。
給定價格序列prices及它的長度n,請返回最大收益。保證長度小於等於500。
測試樣例:
[10,22,5,75,65,80],6
返回:87
將陣列分成兩半,在前一部分中完成第一次的買賣,在後一部分完成第二次的買賣。
import java.util.*; public class Stock { public int maxProfit(int[] prices, int n) { // write code here int before_max = -1; int after_max = -1; int all_max = -1; int cur_min = Integer.MAX_VALUE; for(int index = 1; index<n-1;index++){ cur_min = Integer.MAX_VALUE; before_max = -1; after_max = -1; for(int i = 0;i<=index;i++){ cur_min = Math.min(prices[i],cur_min); before_max = Math.max(before_max,prices[i]-cur_min); } cur_min = Integer.MAX_VALUE; for(int i = index+1;i<n;i++){ cur_min = Math.min(prices[i],cur_min); after_max = Math.max(after_max,prices[i]-cur_min); } all_max = Math.max(all_max,before_max+after_max); } return all_max; } }