刷题之买股票的最佳时机(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];
    }
};
相关推荐
数据分析螺丝钉13 分钟前
力扣第240题“搜索二维矩阵 II”
经验分享·python·算法·leetcode·面试
￴ㅤ￴￴ㅤ9527超级帅14 分钟前
LeetCode hot100---数组及矩阵专题(C++语言)
c++·leetcode·矩阵
鱼跃鹰飞1 小时前
Leecode热题100-295.数据流中的中位数
java·服务器·开发语言·前端·算法·leetcode·面试
源代码•宸4 小时前
Leetcode—76. 最小覆盖子串【困难】
c++·经验分享·算法·leetcode·滑动窗口
百里守约学编程4 小时前
70. 爬楼梯
算法·leetcode·go
Mephisto.java10 小时前
【力扣 | SQL题 | 每日四题】力扣1783,1757,1747,1623,1468,1661
算法·leetcode
大二转专业10 小时前
408算法题leetcode--第21天
考研·算法·leetcode
Tisfy18 小时前
LeetCode 0983.最低票价:记忆化搜索
算法·leetcode·题解·记忆化搜索·哈希表
xiao_fwuu18 小时前
LeetCode 918. 环形子数组的最大和
算法·leetcode·职场和发展
single59421 小时前
【优选算法】(第十七篇)
java·数据结构·c++·vscode·算法·leetcode