Title:
Say you has an array for which the i-th element is the price of a given-stock on day I.
design an algorithm to find the maximum profit. You could complete as many transactions as (ie, buy one and sell one share of the stock multiple times). However, engage in multiple transactions for the same time (ie, you must sell the stock before you buy again). /p>
< Strong style= "Color:rgb (51,51,51)" > idea: This topic allows us to make multiple transactions, and leetcode:54 best time to Buy and Sell stock There are differences. But at the same time, there was only one share in hand. Using the greedy algorithm The idea that we lock a low price, The price rises to the local highest point to throw the stock, as long as some earn to do trading, accumulate all the price difference. Note Two, first we allow the same day to sell the stock and then buy, 2nd, if the stock price every day, then we buy/the next day to sell the total proceeds, and the first day to buy, the last day to sell the same proceeds. If the stock has a price decline, we do not buy, do not count into the total income, we will only obtain the positive benefits into the total income.
example: In the case of a ascending subsequence, such as the 1,2,3,4 sequence in 5,1,2,3,4,0, for two operation scenarios:
One, buy in 1, 4 sell;
Two, buy at 1, 2 sell at the same time buy, 3 sell at the same time buy, 4 sell;
Under these two operations, the benefits are the same.
background: greedy algorithm
greedy method , also known as is a choice that takes the best or optimal (ie most advantageous) position in the current state in each step of the selection, hoping to result in the best or most optimal algorithm. he Only the local optimal solution optimal solution But for a wide range of problems he can produce a global optimal solution or an approximate solution to the overall optimal solution.
Complexity: One-time traversal, O (N)
AC Code:
Class Solution {public: int maxprofit (vector<int> &prices) { //greedy algorithm obtains local optimal if (prices.size () = = 0) return 0; int maxprofit = 0; for (int i = 1; i < prices.size (); i++) { if (Prices[i] > prices[i-1]) { Maxprofit + = prices[i]-pric ES[I-1]; } } return maxprofit;} ;
[C + +] Leetcode:77 best time to Buy and Sell Stock II (greedy algorithm)