• 121. 买卖股票的最佳时机


    121. 买卖股票的最佳时机

    题目链接:121. 买卖股票的最佳时机(简单)

    给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

    你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

    返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

    示例 1:

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

    示例 2:

    输入:prices = [7,6,4,3,1]
    输出:0
    解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

    提示:

    • 1 <= prices.length <= 105

    • 0 <= prices[i] <= 104

    解题思路

    该题需要在只进行一次交易的情况下获得最大的利润。

    用一个变量 min 记录历史中的最小值,这样就可以假设股票是在那一天买的,那么我们在第 i 天卖出股票获得的利润就是 prices[i] - min。在遍历数组的过程中不断寻找历史最小值,再不断将当前的利润与之前的利润做比较找出最大利润。

    C++

    class Solution {
    public:
        int maxProfit(vector<int>& prices) {
            int min = prices[0]; // 用来记录数组中的历史最小值
            int result = 0; // 记录不断出现的最大利润
            for (int i = 1; i < prices.size(); i++) {
                if (prices[i] - min > result) {
                    result = prices[i] - min;
                }
                if (prices[i] < min) {
                    min = prices[i];
                }
            }
            return result;
        }
    };

    JavaScript

    var maxProfit = function(prices) {
        let min = prices[0];
        let result = 0;
        for (let i = 1; i < prices.length; i++) {
            if (prices[i] - min > result) {
                result = prices[i] - min;
            }
            if (prices[i] < min) {
                min = prices[i];
            }
        }
        return result;
    };

     

  • 相关阅读:
    Mvc+三层(批量添加、删除、修改)
    js中判断复选款是否选中
    EF的优缺点
    Git tricks: Unstaging files
    Using Git Submodules
    English Learning
    wix xslt for adding node
    The breakpoint will not currently be hit. No symbols have been loaded for this document."
    Use XSLT in wix
    mfc110ud.dll not found
  • 原文地址:https://www.cnblogs.com/wltree/p/15763789.html
Copyright © 2020-2023  润新知