题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
思路:利用状态机方法,初始化时,hold = -pirce[0],代表持有股票时的利益,sold = 0,代表不持有股票时的利益。
public static int BestTimeToBuyAndSellStockIIMethod(int[] numbers) {
if(numbers==null||numbers.length==0) {
return 0;
}
int hold = -numbers[0]; //今天手里还持有股票,收益
int sold = 0; //今天手里没有股票,持有的收益
for(int i=1;i<numbers.length;i++) {
int pre_hold = hold;
int pre_sold = sold;
hold = Math.max(pre_hold, pre_sold-numbers[i]);
sold = Math.max(pre_sold, pre_hold+numbers[i]);
}
return sold;
}
贪心算法
public int maxProfit(int[] prices) {
int ans = 0;
int n = prices.length;
for (int i = 1; i < n; ++i) {
ans += Math.max(0, prices[i] - prices[i - 1]);
}
return ans;
}
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/solution/mai-mai-gu-piao-de-zui-jia-shi-ji-ii-by-leetcode-s/