刷题笔记49-动态规划part10篇

@

动态规划

● 121. 买卖股票的最佳时机
● 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机

121. 买卖股票的最佳时机

法1:动态规划

    int maxProfit(vector<int>& prices) {
       vector<vector<int>>dp(prices.size(),{-prices[0], 0});
        for (int i = 1; i < prices.size(); ++i) {
            dp[i][0] = max(dp[i - 1][0], -prices[i]);
            dp[i][1] = max(dp[i - 1][1], dp[i -1][0] + prices[i]);
        }
        return dp[prices.size() - 1][1];
}

法2:滚动数组


int maxProfit(vector<int>& prices) {
        int len = prices.size();
        vector<vector<int>> dp(2, vector<int>(2)); // 注意这里只开辟了一个2 * 2大小的二维数组
        dp[0][0] -= prices[0];
        dp[0][1] = 0;
        for (int i = 1; i < len; i++) {
            dp[i % 2][0] = max(dp[(i - 1) % 2][0], -prices[i]);
            dp[i % 2][1] = max(dp[(i - 1) % 2][1], prices[i] + dp[(i - 1) % 2][0]);
        }
        return dp[(len - 1) % 2][1];
    }

122.买卖股票的最佳时机II

122.买卖股票的最佳时机II
法1:动态规划

   int maxProfit(vector<int>& prices) {
        int ans = 0;
        for (int i = 1; i < prices.size(); ++i) {
            ans += max((prices[i] -prices[i-1]) , 0);
        }
        return ans;
    }
posted @ 2023-05-29 22:46  Supersource  阅读(10)  评论(0)    收藏  举报