Design an algorithm to find the maximum profit. You may complete at most two transactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
解题思路:
1. 扫描数组从左到右,算出leftmaxprofit
2. 扫描数组从右到左,算出rightmaxprofit
3. 同时从左到右扫描 leftmaxprofit and rightmaxprofit, 算出最大收益,leftmaxprofit + rightmaxprofit
Java code:
public int maxProfit(int[] prices) { int maxProfit = 0; int[] leftMaxProfit = new int[prices.length]; int[] rightMaxProfit = new int[prices.length]; int minPrice = Integer.MAX_VALUE; for(int i = 0; i < prices.length; i++){ minPrice = minPrice < prices[i]? minPrice : prices[i]; int profit = prices[i] - minPrice; leftMaxProfit[i] = maxProfit > profit ? maxProfit : profit; } int maxPrice = 0; maxProfit = 0; for(int i = prices.length; i > 0; i--){ int profit = maxPrice - prices[i-1]; maxProfit = maxProfit > profit ? maxProfit : profit; rightMaxProfit[i-1] = maxProfit; maxPrice = maxPrice > prices[i-1]? maxPrice : prices[i-1]; } maxProfit = 0; for(int i = 0; i < prices.length; i++){ int profit = leftMaxProfit[i] + rightMaxProfit[i]; maxProfit = profit > maxProfit? profit : maxProfit; } return maxProfit; }
No comments:
Post a Comment