leetcode978_最长湍流子数组_滑动窗口或动态规划

leetcode978_最长湍流子数组_滑动窗口或动态规划_第1张图片

1. 首先假设A[right]和A[right-1]之间的关系是大于小于等于分别为1,-1,0. 这样问题转化为最长的连续变换符号的1,-1,1,-1.......字符串长度有多长.

2. 然后我们可以用滑动窗口方法来做, 注意当条件不满足的时候再来计算,也就是先找到最长的可行解.

3. 依旧是套用滑动窗口模板.

class Solution {
public:
    int compare(int a, int b) {
        if(a>b) return 1;
        else if(a& A) {
        //边界情况.
        if(A.size()==1) return 1;
        //right得从1开始,因为接下来right要和right-1的值进行比较.
        int left=0, right=1;
        //注意res也要是1, 因为如果是[9,9,9]是不会经过while循环的,
        //此时的res结果应该是1.
        int res = 1;
        while(right

leetcode978_最长湍流子数组_滑动窗口或动态规划_第2张图片

 

二. 1. 这种字符串的问题一般也可以考虑利用动态规划来写.

class Solution {
public:
    int compare(int a, int b) {
        return (a>b) ? 1: (a==b) ? 0 : -1;
    }
    int maxTurbulenceSize(vector& A) {
        //边界情况.
        if(A.size()==1) return 1;
        //设定dp数组,其中dp[i]代表的含义是以i结尾字符串最长湍流长度.
        vector dp(A.size());
        dp[0] = 1; 
        //接下来for循环需要从2开始,但是dp[1]需要讨论情况.
        //如果[9,9]这种,则dp[1]=1,否则都是2.
        if(A[0]!=A[1]) dp[1] = 2;
        else dp[1] = 1;
        //最终最长的结果需要遍历dp数组.
        int res = INT_MIN;
        for(int i=2;i

leetcode978_最长湍流子数组_滑动窗口或动态规划_第3张图片

你可能感兴趣的:(leetcode刷题,#,滑动窗口,#,动态规划)