题解 | #买卖股票的最好时机(一)#

买卖股票的最好时机(一)

https://www.nowcoder.com/practice/64b4262d4e6d4f6181cd45446a5821ec

买卖股票的最好时机(一):最直观的想法是,动态规划。交易一次*是否持股一共有两种状态,分别使用dp[i][0]表示第i天持股,使用dp[i][1]表示第i天不持股,然后根据常识对第一天的两种状态进行初始化,接着从第二天开始遍历,分别更新递推公式,其中第i天持股可能是第i-1天就持股或者第i-1天不持股而第i天买入,由于只能买卖一次,故此处为0而不是dp[i-1][1],第i-1天不持股可能是第i-1天就不持股或者第i-1天持股而第i-1天卖出,最后返回第n-1天不持股状态即为最大收益。

    int maxProfit(vector<int>& prices) {
        int n=prices.size();
        // 处理空数组
        if(n==0||n==1)
            return 0;
        // dp[i][0]表示第i天持股 dp[i][1]表示第i天不持股
        vector<vector<int>> dp(n,vector<int>(2,0));
        dp[0][0]=-prices[0];
        dp[0][1]=0;
        for(int i=1;i<n;i++)
        {
            // 第i天持股可能是第i-1天就持股或者第i-1天不持股而第i天买入
            // 由于只能买卖一次 故此处是0而不是dp[i-1][1]
            dp[i][0]=max(dp[i-1][0],0-prices[i]);
            // 第i天不持股可能是第i-1天就不持股或者第i-1天持股而第i天卖出
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]);
        }
        // 最大的即是第n-1天不持股
        return dp[n-1][1];
    }

#买卖股票的最好时机(一)(37202)#
剑指offer 文章被收录于专栏

剑指offer专栏主要分享剑指offer题解。

全部评论

相关推荐

07-25 10:17
仰恩大学 营销
bg双非,被挂了
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务