刷题之买股票的最佳时机(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];
    }
};
相关推荐
好学且牛逼的马4 分钟前
【Hot100|25-LeetCode 142. 环形链表 II - 完整解法详解】
算法·leetcode·链表
样例过了就是过了2 小时前
LeetCode热题100 和为 K 的子数组
数据结构·算法·leetcode
Frostnova丶2 小时前
LeetCode 67. 二进制求和
算法·leetcode
昌兵鼠鼠3 小时前
LeetCode Hot100 哈希
学习·算法·leetcode·哈希算法
脏脏a3 小时前
【优选算法・双指针】以 O (n) 复杂度重构数组操作:从暴力遍历到线性高效的范式跃迁
算法·leetcode·双指针·牛客·优选算法
kamisama_zhu3 小时前
LeetCode 热题100快速通关指南(附模板) (优化完整版,真人心得版,持续更新)
算法·leetcode·职场和发展
蒟蒻小袁4 小时前
力扣hot-100(一刷自用版)
leetcode·哈希算法·散列表
踩坑记录5 小时前
leetcode ho100 124. 二叉树中的最大路径和 hard
leetcode
楠秋9205 小时前
代码随想录算法训练营第三十一天|56. 合并区间 、 738.单调递增的数字、968.监控二叉树
数据结构·算法·leetcode·贪心算法
菜鸡儿齐7 小时前
leetcode-和为k的子数组
java·算法·leetcode