股票买卖(算法)

来源:互联网 发布:mysql 当前时间减30秒 编辑:程序博客网 时间:2024/04/29 18:33

给出一个数组,第i个元素代表第i 天的股票,求最大交易利润,允许最多交易两次。


int maxProfit2(int []prices){int len = prices.length;if(len == 0) return 0;int [] currProfit = new int[len];int [] futrueProfit = new int[len];int low = prices[0];int maxProfit = 0;//记录截止当日最大利润for(int i = 1; i < len; i++){low = Math.min(low,prices[i]);currProfit[i] = Math.max(currProfit[i - 1], prices[i] - low);}int hight = prices[len - 1];for(int j = len - 1; j >= 0; j--){hight = Math.max(hight,prices[j]);if(j < len - 1){futrueProfit[j] = Math.max(futrueProfit[j + 1], hight - prices[j]);}maxProfit = Math.max(maxProfit,currProfit[i] + futrueProfit[i]);}return maxProfit;}


如果允许交易一次:


int maxProfit1(int []prices){int maxProfit = 0;int min = prices[0];for(int i = 0; i < prices.length; i++){min = Math.min(min,prices[i]);maxProfit = Math.max(maxProfit,prices[i] - min);}return maxProfit;}


0 0