leetcode刷题笔记3-买卖股票的最佳时机121


1. 题目

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

2. 实例

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

3. 解答

python3

class Solution:
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        if len(prices) == 0: return 0
        min_num = prices[0]
        max_profit = 0
        for idx in range(1, len(prices)):
            max_profit = max(max_profit, prices[idx]-min_num)
            if prices[idx] < min_num: min_num = prices[idx]
        return max_profit

C++

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if (prices.empty())
            return 0;
        int min_price = prices[0];
        int max_profit = 0;
        for (int i = 1; i < prices.size(); i++) {
            if (prices[i] - min_price > max_profit)
                max_profit = prices[i] - min_price;
            if (prices[i] < min_price)
                min_price = prices[i];
        }
        return max_profit;
    }
};

4. 优答:

使用迭代器和algorithm库中的max_element函数来求得vector中的最大值,顺便求出了最大值所在的位置。这里的auto其实在运行的时候就被自动替换为了vector<int>::iterator类型。

python3

prices = [7,5,1,3,6,4]
min_ele = min(prices)       # 获取最小元素
min_index = prices.index(min_ele)   # 获取最小元素下标

猜你喜欢

转载自www.cnblogs.com/Joyce-song94/p/9132762.html