Leetcode-Best Time to Buy and Sell Stock III
Say you have an array for which the ith element is the price of a given stock on day i.
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).
Analysis:
We calculate two things:1. from day 0 to day i, what the maximum profit we can get by performing only one transcation. 2. from any day i to the end, what the maximum profit we can get by performing one transcation. We then find out the maximum profit by adding them up for each day.
Solution:
1 public class Solution { 2 public int maxProfit(int[] prices) { 3 int len = prices.length; 4 if (len==0 || len==1) return 0; 5 6 int[] posProfit = new int[len]; 7 int[] negProfit = new int[len]; 8 9 int maxProfit = 0; 10 int curProfit = 0; 11 int minPrice = prices[0]; 12 for (int i=0;i<len;i++){ 13 if (minPrice>prices[i]) minPrice = prices[i]; 14 curProfit = prices[i]-minPrice; 15 if (curProfit>maxProfit) maxProfit = curProfit; 16 posProfit[i] = maxProfit; 17 } 18 19 maxProfit = 0; 20 curProfit = 0; 21 int maxPrice = prices[len-1]; 22 for (int i=len-1;i>=0;i--){ 23 if (maxPrice<prices[i]) maxPrice = prices[i]; 24 curProfit = maxPrice-prices[i]; 25 if (curProfit>maxProfit) maxProfit = curProfit; 26 negProfit[i]=maxProfit; 27 } 28 29 int res = 0; 30 for (int i=0;i<len;i++) 31 if (res<posProfit[i]+negProfit[i]) res = posProfit[i]+negProfit[i]; 32 33 return res; 34 } 35 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步