买卖股票的最佳时机(力扣简单题,动态规划,max(),min()函数应用)

题目:

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

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

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

思路:

想法一:

  1. 因为要考虑买入卖出中间差最大,且买入卖出有先后顺序,因此不能单纯以最大最小值作参考。
  2. 要对每一个数进行讨论,但这样会使时间复杂度出奇的大。
  3. 因此我们选用动态规划,动态规划 :前i天的最大收益 = max
  4. 在使用动态规划过程中,我一开始选择创建一个最小值的方法,对每次前i个数进行排序,找到最小值,后来感觉T很大,放弃后使用flag变量标记前i个数最小值的下标,每增加一个数就与最小值进行比较。
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int max = 0;
        int flag = 0;
        for(int i = 1;i < prices.size();i++){
            if(prices[i] < prices[flag]){
                flag = i;
            }
            if((prices[i] - prices[flag]) > max){
                max = (prices[i] - prices[flag]);
            }
        }
        return max;

    }
};

想法二:

而官方给出的代码是:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int inf = 1e9;
        int minprice = inf, maxprofit = 0;
        for (int price: prices) {
            maxprofit = max(maxprofit, price - minprice);
            minprice = min(price, minprice);
        }
        return maxprofit;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/solutions/136684/121-mai-mai-gu-piao-de-zui-jia-shi-ji-by-leetcode-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  1. 其中1e9代表无穷。实际中遇到的一些问题,或者解决一些算法问题时,会遇到给某个变量初始化并赋值为1e9。接着后面会出现一些代码计算最小值。这时,1e9的作用是给变量赋一个初始极大值,原因在于后面的代码中需要取此变量和其他变量的最小值。初始化为一个最大值,亦即初始化为无穷,便于后面极小值的比较和获取,属于初始化的目的。
  2. 调用max函数可以直接计算二者最大值,min可以直接计算二者最小值。官方和我的思路差不多,不过实现形式简化了不少
posted @   ku然  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示