給定一個數(shù)組,它的第 i 個元素是一支給定股票第 i 天的價格哈恰。
設(shè)計一個算法來計算你所能獲取的最大利潤只估。你可以盡可能地完成更多的交易(多次買賣一支股票)。
注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)蕊蝗。
示例 1:
輸入: [7,1,5,3,6,4]
輸出: 7
解釋: 在第 2 天(股票價格 = 1)的時候買入仅乓,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4 。
隨后蓬戚,在第 4 天(股票價格 = 3)的時候買入夸楣,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能獲得利潤 = 6-3 = 3 。
示例 2:
輸入: [1,2,3,4,5]
輸出: 4
解釋: 在第 1 天(股票價格 = 1)的時候買入子漩,在第 5 天 (股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4 豫喧。
注意你不能在第 1 天和第 2 天接連購買股票,之后再將它們賣出幢泼。
因為這樣屬于同時參與了多筆交易紧显,你必須在再次購買前出售掉之前的股票。
示例 3:
輸入: [7,6,4,3,1]
輸出: 0
解釋: 在這種情況下, 沒有交易完成, 所以最大利潤為 0缕棵。
思路:
這個和上一個問題類似孵班,并且簡單,當(dāng)然是想的前提下招驴。
可以多次購買篙程,賣出。我們就不需要記錄后面的最大值了别厘。只需要知道虱饿,從哪開始不能賣出就好了。
當(dāng)只有一個數(shù)據(jù)的時候触趴,0元氮发。
當(dāng)有兩個數(shù)據(jù)的時候,后大與前時候冗懦,后-前元爽冕。否則0元。
當(dāng)有三個的時候批狐,后兩個同上扇售,第一個,和第二個嚣艇,同上承冰。
每次的錢要記錄,最后要累加食零。不需要記錄最后最大值困乒。每次兩個,兩個處理贰谣。
int maxProfit(int* prices, int pricesSize) {
if(pricesSize == 0)
return 0;
int b[pricesSize];
b[pricesSize-1] = 0;
// int max = 0;
for(int i = pricesSize-1;i>0;i--){
if(prices[i]>prices[i-1]){
b[i-1] = prices[i]-prices[i-1];
}
else{
b[i-1] = 0;
}
b[pricesSize-1] += b[i-1];
}
return b[pricesSize-1];
}