LeetCode 122:买卖股票的最佳时间Ⅱ

方法一:贪心算法,只要第二天比前一天高,就前一天买入,第二天卖出 

    int maxProfit(vector<int>& prices) {
        const int n = prices.size();
        //if(n<=1) return 0;

        int profit = 0;
        for(int i=1; i<n; i++) {
            if(prices[i]>prices[i-1]) {
                profit += prices[i]-prices[i-1];
            }
        }
        return profit;
    }

方法二:DP,状态机为每一天是否持有股票,每种情况又是前一天的两种情况的收益的函数,就可以得到状态转移的表达式

Tips:1、注意使用STL时二维矩阵的定义:https://blog.csdn.net/a819825294/article/details/52088732

2、这种方法的时间空间消耗都比较大,仅作扩展思路用即可,类似的还有讨论区有DFS算法

    int maxProfit(vector<int>& prices) {
        const int n = prices.size();
        if(n<=1) return 0;

        //vector<vector<int>>(n)(2) dp; //n*2的数组
        vector<vector<int>> dp(n);
        for(int i=0; i<n; i++)
            dp[i].resize(2);

        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        for(int i=1; i<n; i++) {
            dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]);
            dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i]);
        }
        return dp[n-1][0];
    }
发布了97 篇原创文章 · 获赞 11 · 访问量 2489

猜你喜欢

转载自blog.csdn.net/chengda321/article/details/102672903