leetcode hot100刷题日记——19.买卖股票的最佳时机

解答:

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //思路:买股票的时候希望自己在最低点买入,最高点卖出,但是有卖出点要在买入点后面的时间限制
        //而遍历,自然而然有"时间限制"
        //所以在一次遍历过程中,我们把每天都看成考虑要不要卖出去,假设自己之前是在最低点买入
        //更新最低价格
        //检查当前能不能得到最高利润,即maxx=max(maxx,prices[i]-minn);
        int minn=1e9;
        int maxx=0;
        int n=prices.size();
        if(n==1){
                return 0;
        }
        for(int i=0;i<n;i++){
        		minn=min(minn,prices[i]);
                maxx=max(maxx,prices[i]-minn);
        }
        return maxx;
    }
};

时间复杂度:O(N)

空间复杂度:O(1)

看到题解说这也是一种动态规划的思想,我们来捋一下:

对于第i天,

  • 我们如果在前i-1天已经完成了一轮买卖操作,则第i天不能做任何操作,问题转化为dp[i-1]
  • 如果我们在前i-1天只是做了买入,在第i天卖出,那么在第0到第i天,进行一轮买卖操作,在这种情况下,卖出的价格一定是prices[i],那么买入价格一定是前i-1天中的最小值,即minn=min(prices[0],......prices[i-1]),收益就是prices[i]-minn
    而要使收益最大,dp[i]=max(dp[i-1],prices[i]-minn)
相关推荐
君鼎30 分钟前
More Effective C++ 条款01:仔细区别 pointers 和 references
c++
艾醒42 分钟前
大模型面试题剖析:大模型微调与训练硬件成本计算
人工智能·后端·算法
啊嘞嘞?1 小时前
力扣(滑动窗口最大值)
算法·leetcode·职场和发展
快递鸟1 小时前
ISV系统开发中物流接口的第三方模块对接:技术选型与集成实践
算法
墨染点香1 小时前
LeetCode 刷题【53. 最大子数组和】
数据结构·算法·leetcode
2501_924879262 小时前
客流特征识别误报率↓76%!陌讯多模态时序融合算法在智慧零售的实战解析
大数据·人工智能·算法·目标检测·计算机视觉·视觉检测·零售
工藤新一¹2 小时前
C/C++ 数据结构 —— 树(2)
c语言·数据结构·c++·二叉树··c/c++
北京地铁1号线2 小时前
广告推荐模型2:因子分解机(Factorization Machines, FM)
人工智能·算法·推荐算法
源远流长jerry2 小时前
STM32之DMA详解
linux·网络·c++·stm32·单片机·嵌入式硬件
是店小二呀2 小时前
【C++】智能指针底层原理:引用计数与资源管理机制
android·java·c++