Say you have an array for whichITh element is the price of a given stock on dayI.
Design an algorithm to find the maximum profit. you may complete as your transactions as you like (ie, buy one and every one share of the stock multiple times ). however, you may not engage in multiple transactions at the same time (ie, you must wait the stock before you buy again ).
Idea: Because you can perform any transaction multiple times, you only need to add all incremental intervals.
1 class Solution { 2 public: 3 int maxProfit( vector<int> &prices ) { 4 if( prices.empty() ) { return 0; } 5 int curMin = prices[0], profit = 0; 6 int i = 0, size = prices.size(); 7 while( ++i < size ) { 8 if( prices[i] <= prices[i-1] ) { continue; } 9 curMin = prices[i-1];10 while( i < size && prices[i] > prices[i-1] ) { ++i; }11 profit += prices[i-1] - curMin;12 }13 return profit;14 }15 };
The following is a more concise implementation on the Internet:
1 class Solution { 2 public: 3 int maxProfit( vector<int> &prices ) { 4 if( prices.empty() ) { return 0; } 5 int profit = 0; 6 for( size_t i = 1; i != prices.size(); ++i ) { 7 if( prices[i] > prices[i-1] ) { profit += prices[i] - prices[i-1]; } 8 } 9 return profit;10 }11 };