描述
假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。
个人思路:做法借鉴于买卖股票的最佳时机(含手续费),还是在讨论该分一次卖还是分两次卖的收益更高,其实如果maxP > price[i],即i及之前的最高价格如果高于目前的价格,那么就是值得卖的,并且不用担心如果后面出现更大的数再卖会收获更大的收益
public int maxProfit(int[] prices) {
// write your code here
if(prices.length == 0)
return 0;
int minP = prices[0];
int maxP = prices[0];
int curP = 0;
int profit = 0;
for (int i = 0; i < prices.length; i++) {
minP = Integer.min(minP, prices[i]);
maxP = Integer.max(maxP, prices[i]);
curP = Integer.max(curP, prices[i] - minP);
if (maxP >= prices[i]){
profit += curP;
curP = 0;
maxP = prices[i];
minP = prices[i];
}
}
return profit;
}
dalao思路:(原来是允许当天买入当天卖出?)贪心策略:如果后一天的比前一天股票价格高,反正没有手续费,那就值得卖以获取目前最大的利润。
public int maxProfit(int[] prices) {
int profit = 0;
for (int i = 0; i < prices.length - 1; ++i) {
if (prices[i + 1] > prices[i]) {
profit += (prices[i + 1] - prices[i]);
}
}
return profit;
}