day113(3.15)——leetcode面试经典150
123. 买卖股票的最佳时机 III123. 买卖股票的最佳时机 Ⅲ题目题解class Solution { // 可以买卖多次但手里只能持有一股。 // 最多可以完成 两笔 交易。 // 因为可以多次买卖所以“买入”的时候可以用“上一次卖出赚的钱”来抵扣成本。 public int maxProfit(int[] prices) { //如果当前股票的数量2,直接就是不持有股票利润为0 if(pricesnull||prices.length2) { return 0; } int n prices.length; int[][] dp new int[n][4]; //创建二维数组 //int[i][0]: 第1次卖入后的最大收益 //表示第i天没有股票可能之前有但就在第i天卖掉了也可能之前就没有所以第i天也不买 dp[0][0]0; //int[i][1]: 第1次买入后的最大收益 //表示第i天有股票可能之前有但第i天也不买也可能之前就没有所以第i天就买了 dp[0][1]-prices[0]; // dp[i][2]: 第2次卖入后的最大收益 //表示第i天没有股票买了-卖了-又买-卖了 dp[0][2]0; // dp[i][3]: 第2次买出后的最大收益 //表示第i天有股票买了-卖了-又买 dp[0][3]-prices[0]; //遍历每一天的股票数 for(int i1;in;i) { //dp[i][0]状态要么之前卖的要么今天卖用第一次买入的状态 今天价格 dp[i][0] Math.max(prices[i]dp[i-1][1], dp[i-1][0]); //dp[i][1]状态要么之前买的要么今天刚买初始资金0 dp[i][1] Math.max(dp[i-1][1], -prices[i]); //dp[i][2]状态要么之前卖的要么今天卖用第二次买入的状态 今天价格 dp[i][2] Math.max(prices[i]dp[i-1][3], dp[i-1][2]); //dp[i][3]状态要么之前买的要么今天刚买用第一次卖出的利润 - 今天价格 dp[i][3] Math.max(dp[i-1][0]-prices[i], dp[i-1][3]); } //一定是没有股票的时候能得到最大利润如果当前有股票那一定是亏钱的且肯定是进行完了第二次交易后最大 return dp[n-1][2]; } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414058.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!