刷题之买股票的最佳时机(leetcode)

买股票的最佳时机

动态规划入门题。

最简单的模拟式解法:

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //也可以换一种思路,因为只交易一次,那么找出股票最便宜的时候买入,最贵的时候卖出,最大利润为(该天的股价-前面天数中最小的股价)
        int profit=0;
        int cost=prices[0];
        for(int i=1;i<prices.size();i++)
        {
            profit=max(prices[i]-cost,profit);
            cost=min(prices[i],cost);
        }
        return profit;
    }
};

动态规划解法:

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<vector<int>>dp(prices.size(),vector<int>(2,0));
        dp[0][0]=0;
        dp[0][1]=-prices[0];
        for(int i=1;i<prices.size();i++)
        {
            //只能交一次易
            //第i天没有持有股票的最大利润为前一天没有持有股票,并且第i天也没有买入;第i-1天有,但今天卖出
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]);
            //第i天持有股票的最大利润是:前一天有股票,第i天没有卖出,或者第i天买入
            dp[i][1]=max(dp[i-1][1],-prices[i]);
        }
        return dp[prices.size()-1][0];
    }
};
相关推荐
好易学·数据结构24 分钟前
可视化图解算法36: 序列化二叉树-I(二叉树序列化与反序列化)
数据结构·算法·leetcode·二叉树·力扣·序列化·牛客
孙同学_2 小时前
【递归,搜索与回溯算法篇】专题(一) - 递归
算法·leetcode
2301_807611493 小时前
47. 全排列 II
c++·算法·leetcode·回溯
Kidddddult10 小时前
力扣刷题Day 43:矩阵置零(73)
算法·leetcode·力扣
进击的小白菜14 小时前
如何高效实现「LeetCode25. K 个一组翻转链表」?Java 详细解决方案
java·数据结构·leetcode·链表
我是一只鱼022316 小时前
LeetCode算法题 (反转链表)Day17!!!C/C++
数据结构·c++·算法·leetcode·链表
LuckyLay16 小时前
LeetCode算法题(Go语言实现)_62
算法·leetcode·职场和发展
元亓亓亓16 小时前
LeetCode热题100--54.螺旋矩阵--中等
算法·leetcode·矩阵
石去皿18 小时前
C++ 中的 `it->second` 和 `it.second`:迭代器与对象访问的微妙区别
开发语言·c++·算法·leetcode
编程绿豆侠20 小时前
力扣HOT100之链表:146. LRU 缓存
leetcode·链表·缓存