Best Time to Buy and Sell Stock III(最多出手两次的多大获利)

出现的bugs:
(1)由两个if的来计算序列的值,讨论了>和<而忽略的=的情况,结果对应的值被默认初始化
(2)引用初始化。在两个函数里的两个参数引用初始化了同一个vector,结果是第二个引用参数由于iterator的更改而全部失效,也就是说所有的结果都恢复到了初始化的状态。
思维的卡壳:
(1)计算逆序的最大值时出错

class Solution { public: vectormaxlr(vector &prices) { vector res(prices.size()); if(prices.size()==0) return res; int min=prices[0]; res[0]=0; int maxp=0; for(int i=1; imin){ maxp=max(maxp,prices[i]-min); res[i]=maxp; } } return res; } vectormaxrl(vector &prices) { vector res(prices.size()); if(prices.size()==0) return res; int maxv=prices.back(); res.back()=0; int maxp=0; for(int i=prices.size()-2; i>=0; --i){ if(prices[i]>=maxv) {res[i]=res[i+1]; maxv=prices[i]; } if(prices[i] &prices) { if(prices.size()==0) return 0; vector lr= maxlr(prices); //cout< rl= maxrl(prices); //cout<

容易理解的暴力法如下:
class Solution { public: int maxp(vector &prices,int beg,int end) { if(prices.size()==0) return 0; int min=INT_MAX; int maxp=0; for(int i=beg ; imin){ maxp=max(maxp,prices[i]-min); } } return maxp; } int maxProfit(vector &prices) { if(prices.size()==0) return 0; int maxv=maxp(prices,0,prices.size()); for(int i=2; i【Best Time to Buy and Sell Stock III(最多出手两次的多大获利)】maxv) maxv=tmp; } return maxv; } };




    推荐阅读