假设有一个数组,它的第 i 个元素是一个给定的股票在第 i 天的价格。
设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。
分析:
首先,提前知道了每一天的股票价格,所以比真实炒股容易很多。
其次,从题意可以了解,没有买卖股票数量的概念,可理解为只买卖一张股票。
最后,利润是卖出时价格减去买入的价格。
据此分析,java解答如下:
public int maxProfit(int[] prices) {
if (prices.length == 0 || prices.length == 1) {
return 0;
}
boolean buyState = false;
int buyValue = 0;
int profit = 0;
for (int i = 0; i < prices.length; i++) {
if (i == prices.length - 1) {
if (buyState) {
profit += prices[i] - buyValue;
}
break;
}
if (buyState) {
if (prices[i] >= prices[i + 1]) {
/*明天的价格小于或等于今天的,卖出;否则就持有再等一天*/
profit += prices[i] - buyValue;
buyState = false;
}
} else {
if (prices[i] < prices[i + 1]) {
//明天的价格比今天高,买入
buyState = true;
buyValue = prices[i];
}
}
}
return profit;
}