Say you have an array for which the ith element is the price of a given stock on day i.this
Design an algorithm to find the maximum profit. You may complete as many transactions as you like (i.e., buy one and sell one share of the stock multiple times).spa
Note: You may not engage in multiple transactions at the same time (i.e., you must sell the stock before you buy again).code
Example 1:blog
Input: [7,1,5,3,6,4] Output: 7 Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4. Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3 = 3.
Example 2:圖片
Input: [1,2,3,4,5] Output: 4 Explanation: Buy on day 1 (price = 1) and sell on day 5 (price = 5), profit = 5-1 = 4. Note that you cannot buy on day 1, buy on day 2 and sell them later, as you are engaging multiple transactions at the same time. You must sell before buying again.
Example 3:ip
Input: [7,6,4,3,1] Output: 0 Explanation: In this case, no transaction is done, i.e. max profit = 0.
題目大意:與上一題相似,只不過沒有次數限制。求最大獲利。element
思路:若是一直遞增,那麼最後一個元素減去第一個元素就是當前區間最大獲利,沒疑問吧。若是相似於1 3 2 4這種山峯似的,將每一個遞增子區間的獲利加起來,就是最大獲利。it
Solution中有個圖片看一眼就知道了。io
public int maxProfit(int[] arr) { if (arr == null ||arr.length == 0) { return 0; } int len = arr.length; int i = 1; int start = 0; int res = 0; while(i<len) { while(i<len && arr[i] > arr[i-1]) { i++; } res += Math.max(arr[i-1] - arr[start], 0); start = i; i++; } return res; }