CS-Notes/docs/notes/69. 股票的最大利润二.md

1.2 KiB
Raw Blame History

69. 股票的最大利润 二

题目链接

LeetcodeBest Time to Buy and Sell Stock II

题目描述

可以有任意次数买入和卖出,求最大收益。

输入: [7,1,5,3,6,4]
输出: 7
解释:
  - 第二天以1的价格买入第三天以5的价格卖出.利润就是 5-1 = 4.
  - 第四天以3的价格买入第五天以6的价格卖出.利润就是 6-3 = 3.
  - 所以总共利润就是4+3 = 7.

解题思路

使用峰谷策略

TODO: 添加图片 notes/pics/maxprofit2.png

public int maxProfit(int[] prices) {
    int i = 0;
    int valley = prices[0];
    int peak = prices[0];
    int maxprofit = 0;
    while (i < prices.length - 1) {
        while (i < prices.length - 1 && prices[i] >= prices[i + 1])
            i++;
        valley = prices[i];
        while (i < prices.length - 1 && prices[i] <= prices[i + 1])
            i++;
        peak = prices[i];
        maxprofit += peak - valley;
    }
    return maxprofit;
}