描述

假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。
你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。

示例1

输入:
[1,4,2]

返回值:
3

示例2

输入:
[2,4,1]

返回值:
2

思路

这个和咱们现实中买股票是一样的,总是希望在最低点买入,在最高点卖出。这道题也是如此,咱们只要找到那天是最低点,并计算每天卖出能挣多少钱,找到卖出最多钱的那天就是这道题的答案。

AC 代码

    public int maxProfit (int[] prices) {
        // write code here
        if (prices == null || prices.length < 1) {
            return -1;
        }
        // 历史最低价格
        int minPrice = Integer.MAX_VALUE;
        // 最大的差价
        int maxProfit = 0;
        // 遍历每天
        for (int i = 0; i < prices.length; i ++) {
            // 如果价格比目前记录的最低价格还低,那么就今天买入!
            if (prices[i] < minPrice) {
                minPrice = prices[i];
            } else {
                // 否则就计算今天卖出能赚多少钱
                int price = prices[i] - minPrice;
                // 更新赚钱的最大差值
                maxProfit = price > maxProfit ? price : maxProfit;
            }
        }
        return maxProfit;
    }
  • 时间复杂度:O(n),n 数组长度。
  • 空间复杂度:O(1),没有浪费额外空间。

最后

大家可以去 【牛客网-题库-在线编程】去练习一下。
可以去微信搜索:【蘑菇睡不着】交个朋友~
也可以扫描下方二维码。

图片说明