菱纱梦

导航

Best Time to Buy and Sell Stock III <leetcode>

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete at most two transactions.

Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

 

 

思路:这个题本来行到的分成两部分,分别用动态规划,后来在由于做第一个题的时候,看到过一个比较简单的动态规划,因此在这里直接用了,(虽然代码写的不同,想法不同,但是我们用的都是动态规划),一下比较简洁的动态规划的代码:

 

 1 class Solution {
 2 public:
 3     int maxProfit(vector<int> &prices) {
 4     int minl=INT_MAX;
 5     int maxr=INT_MIN;
 6     
 7     int size=prices.size();
 8     if(size==0)  return 0;
 9     vector<int> f1(size);
10     vector<int> f2(size);
11     
12     minl=prices[0];
13     
14     for(int i=1;i<size;i++)
15     {
16         minl=min(minl,prices[i]);
17         f1[i]=max(f1[i-1],prices[i]-minl);
18     }
19     
20     maxr=prices[size-1];
21     
22     for(int i=size-2;i>=0;i--)
23     {
24        maxr=max(maxr,prices[i]); 
25        f2[i]=max(f2[i+1],maxr-prices[i]);
26     }
27     
28     int sum = 0;
29         for (int i = 0; i < size; i++)
30             sum = std::max(sum, f1[i] + f2[i]);
31 
32         return sum;
33     }
34 };

 

posted on 2014-09-07 13:21  菱纱梦  阅读(140)  评论(0编辑  收藏  举报