Say you have an array for whichITh element is the price of a given stock on dayI.
If you were only permitted to complete at most one transaction (ie, buy one and every one share of the stock), design an algorithm to find the maximum profit.
The idea without algorithms is terrible. N ^ 2 definitely times out, but it is still written. Finally, I took a look at other people's ideas and used dynamic planning, which is a typical dynamic planning question.
The idea is as follows:
If DP [I] is the maximum profit in the range [, 2... I], the one-dimensional dynamic planning equation for this problem is as follows:
DP [I + 1] = max {DP [I], Prices [I + 1]-minprices}, minprices is the interval [, 2 ..., i] the lowest price
1 class Solution{ 2 public: 3 int maxProfit(vector<int> &prices){ 4 int len=prices.size(); 5 if(len<=1) 6 { 7 return 0; 8 } 9 int max=prices[1]-prices[0],minprice=prices[0];10 for(int i=2;i<len;i++)11 {12 minprice=prices[i-1]<minprice?prices[i-1]:minprice;13 if(max<prices[i]-minprice)14 {15 max=prices[i]-minprice;16 }17 }18 if(max<0)19 {20 return 0;21 }22 else23 {24 return max;25 }26 }27 };