MS 978. Longest Turbulent Subarray


DP version:
class Solution {
public:
    int maxTurbulenceSize(vector<int>& A) {
        const int size = A.size();
        if(size < 2){
            return size;
        }
        vector<int> dp(size, 1);
        dp[0] = 1;
        int res = 1;
        for(int i = 0; i < size - 1; i++){
            if(i % 2 == 0){
                if(A[i] > A[i + 1]){
                    dp[i + 1] = dp[i] + 1;
                }
            }
            else{
                if(A[i] < A[i + 1]){
                    dp[i + 1] = dp[i] + 1;
                }
            }
            res = max(res, dp[i + 1]);
        }
        dp = vector<int>(size, 1);
        for(int i = 0; i < size - 1; i++){
            if(i % 2 == 0){
                if(A[i] < A[i + 1]){
                    dp[i + 1] = dp[i] + 1;
                }
            }
            else{
                if(A[i] > A[i + 1]){
                    dp[i + 1] = dp[i] + 1;
                }
            }
            res = max(res, dp[i + 1]);
        }
        return res;
    }
};

贪心法
class Solution {
public:
    int maxTurbulenceSize(vector<int>& A) {
        const int size = A.size();
        if(size < 2){
            return size;
        }
        //vector<int> dp(size, 1);
        //dp[0] = 1;
        int dec = 1, inc = 1;
        int res = 1;
        for(int i = 0; i < size - 1; i++){
           if(A[i] > A[i + 1]){
               dec = inc + 1;
               inc = 1;
           }
            else if(A[i] < A[i + 1]){
                inc = dec + 1;
                dec = 1;
            }
            else{
                inc = 1;
                dec = 1;
            }
            res = max(res, max(inc, dec))
        }
        return res;
    }
};

Comments

Popular posts from this blog

算法的比较