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天不能做任何操作,问题转化为dpi-1
  • 如果我们在前i-1天只是做了买入,在第i天卖出,那么在第0到第i天,进行一轮买卖操作,在这种情况下,卖出的价格一定是pricesi,那么买入价格一定是前i-1天中的最小值,即minn=min(prices0,......pricesi-1),收益就是pricesi-minn
    而要使收益最大,dpi=max(dpi-1,pricesi-minn)
相关推荐
lilili也7 小时前
visual studio add matlab
c语言·c++
Forever Nore7 小时前
LeetCode 1 两数之和
算法·leetcode·职场和发展
To_OC7 小时前
LC 3 无重复字符的最长子串:从入门滑动窗口到优化写法,再也不怕面试官追问
javascript·算法·leetcode
(Charon)8 小时前
【C++】多线程死锁:产生原因、复现与解决方法
开发语言·c++·算法
lucas_AI8 小时前
ConfBench:大模型的「我很有把握」,到底能不能信?
人工智能·算法
oier_Asad.Chen8 小时前
【洛谷题解/AcWing题解/真题】洛谷P2330【SCOI2005】繁忙的都市(Kruskal算法的再探究))
c++·算法·贪心算法·图论·最小生成树·kruskal
我想走路带风11 小时前
各自缓冲及实现
c++
青 春 记 忆11 小时前
LeetCode 53. 最大子数组和|Python 解法详解
python·算法·leetcode
豆瓣鸡11 小时前
算法日记 - Day10
算法
戴西软件11 小时前
戴西CAxWorks.VPG车辆工程仿真软件技术解析(上)——安全仿真体系的自动化构建
运维·网络·数据库·人工智能·算法·安全·自动化