LeetCode题解-Best Time to Buy and Sell Stock III

来源:互联网 发布:laravel mac 环境 编辑:程序博客网 时间:2024/05/23 17:55

Best Time to Buy and Sell Stock II基础上增加条件:两次交易的最大收益

思路一:将数组分为前后两部分,数组大小为size,记分隔符为i,分别求(0,i)以及(i+1,size-1)的最大收益(很一般的思路,没有过大数据关,主要是有太多重复计算),将收益相加,即为本次的最大值,依次迭代,即可获得最大收益。

思路二:分别计算正向收益(见Best Time to Buy and Sell Stock)以及逆向收益,将相应收益相加,找最大收益。

代码1:

int Profit(vector<int>& prices,const int& start,const int& end){int minPrice=INT_MAX;int maxProfit=0;for (int i=start;i<=end;i++){minPrice=min(prices[i],minPrice);int diff=prices[i]-minPrice;if(diff>maxProfit)maxProfit=diff;}return maxProfit;}int maxProfit(vector<int>& prices){int size=prices.size();if(size<=1)return 0;int sum=0;int max1,max2=0;for (int i=0;i<size;i++){max1=Profit(prices,0,i);max2=Profit(prices,i+1,size-1);sum=max(max1+max2,sum);}return sum;}
代码2:

<span style="font-family:KaiTi_GB2312;font-size:18px;">int Profit(vector<int> &prices) {   int size=prices.size();    if(size <= 1) return 0;      vector<int> maxFromLeft(prices.size(), 0);      vector<int> maxFromRight(prices.size(), 0);  int minPrice=INT_MAX;int maxProfit=INT_MIN;       for(int i =0; i< size; i++)      {          minPrice=min(prices[i],minPrice);maxProfit=max(maxProfit,prices[i]-minPrice);          maxFromLeft[i] = maxProfit;      }      int maxPrice=INT_MIN;maxProfit=INT_MIN;    for(int i =size-1; i>=0; i--)      {  maxPrice=max(prices[i],maxPrice); maxProfit=max(maxProfit,maxPrice-prices[i]);              maxFromRight[i] = maxProfit;      }      maxProfit = INT_MIN;      for(int i =0; i< size-1; i++)      {          int sum = maxFromLeft[i] + maxFromRight[i+1];maxProfit=max(sum,maxProfit);          }     if(maxProfit < maxFromRight[0])          maxProfit = maxFromRight[0];      return maxProfit;   } </span>



0 0
原创粉丝点击