Leetcode

Leetcode.121.Best Time to Buy an

2019-10-23  本文已影响0人  Jimmy木

题目

给定一个数组, 表示第i天的股票价格, 最多只能进行一次买卖, 如何获取最大利润.

Input: [7,1,5,3,6,4]
Output: 5
Input: [7,6,4,3,1]
Output: 0

思路1

循环
时间复杂度O(n²)

int maxProfit(vector<int>& prices) {
    int n = (int)prices.size();
    int res = 0;
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            res = max(prices[i] - prices[j], res);
        }
    }

    return res;
}

思路2

在遍历时, 记录最小值, 然后遍历时的值减去最小值就可能得出最大值.
时间复杂度O(n)

int maxProfit(vector<int>& prices) {
    int n = (int)prices.size();
    if (n == 0) return 0;
    int res = 0, minP = prices[0];
    for (int i = 1; i < n; i++) {
        int tmp = prices[i];
        res = max(tmp - minP, res);
        if (tmp < minP) {
            minP = tmp;
        }
    }
    return res;
}

总结

将题目转换为数学问题.

上一篇 下一篇

猜你喜欢

热点阅读