FTPrep, 123 Best Time to Buy and Sell Stock III, 没完全懂,TODO

来源:互联网 发布:网络消费安全的ppt 编辑:程序博客网 时间:2024/06/05 06:34

这题不敢说完全懂了。只能看看别人的代码研究研究思路

先贴在这里,todo

class Solution {    public int maxProfit(int[] prices) {        if(prices==null || prices.length==0)              return 0;          int[] local = new int[3];          int[] global = new int[3];          for(int i=0;i<prices.length-1;i++)          {              int diff = prices[i+1]-prices[i];              for(int j=2;j>=1;j--)              {                  local[j] = Math.max(global[j-1]+(diff>0?diff:0), local[j]+diff);                  global[j] = Math.max(local[j],global[j]);              }          }          return global[2];              }}// 这题没有完全懂,就是没懂。// 虽说local 和 global这里是 1维 array,实际上是 一个2D的,是因为dp算法只依赖上一列的数值,所以不断的over write,可以节省空间资源。// local是说最后一次交易一定算在里面,也就是说一定在最后一天卖出手头的股票。// global是说整个范围内,一定次数的交易次数后的最大值。// 这样的话,来理解下两个 变量的更新:// local[j] = Math.max(global[j-1]+(diff>0?diff:0), local[j]+diff);//        括号里的是两种情况:1,最后一次交易就是倒数第二天买入,最后第一天卖出,所以这次交易是单独存在的,然后加上global里[j-1]的最优值即可;2,最后一次diff的买点是倒数第二天之前的,所以把最后一天的加上去即可,也就是说是local[j]的一次延续。// global[j] = Math.max(local[j],global[j]);//        括号里的两种情况,就是包含了最后一天卖掉股票的交易,和没有包含的这两种情况:1,就是刚刚更新的local[j]; 2,就是之前就有的 global[j] 不涉及最后一天卖掉股票的这个交易。