LeetCode 122. 买卖股票的最佳时机 II (思维题、贪心、DP)

买卖股票的最佳时机 II
累积每个单调升序端一头一尾的差值。

class Solution {
public:
    int maxProfit(vector<int>& a) {
        int ans = 0 , n = a.size();
        int l = 0;
        for(int i=1;i<n;i++){
            if(a[i]<a[i-1]){
                ans += a[i-1]-a[l];
                l = i;
            }
        }
        ans += max(0,a[n-1]-a[l]);
        return ans;
    }
};

有点差分的感觉。

class Solution {
public:
    int maxProfit(vector<int>& a) {
        int ans = 0 ;
        for(int i=1;i<a.size();i++){
            ans += max(0,a[i]-a[i-1]);
        }
        return ans;
    }
};

看到有人用DP去做,感觉确实很巧妙,很符合DP的应用场景。很妙!

class Solution {
public:
    int maxProfit(vector<int>& a) {
        int n = a.size();
        if(n<2) return 0;
        vector<vector<int>> dp(n,vector<int>(2));
        dp[0][0] = 0;
        dp[0][1] = -a[0];
        for(int i=1;i<n;i++){
            dp[i][0] = max(dp[i-1][0],dp[i-1][1]+a[i]);
            dp[i][1] = max(dp[i-1][1],dp[i-1][0]-a[i]);
        }
        return dp[n-1][0];
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/107479839