LeetCode 978. 最长湍流子数组

哎。。。滑动窗口的题目,自己猜到了要用滑动窗口,但是没做出来;

 

这道题目用滑动窗口和DP都可以;

 

滑动窗口:

如果采用滑动窗口的记录前一位标志位,right和right-1比较,会丢失一部分序列;

例如:9,4,2,10,7,8;

湍流数列应该为:4,2,10,7,8;

但是如果采用我的滑动窗口比较会变为:2,10,7,8;

原因是当记录了9,4,2之后,会从2重新开始计算湍流,而不是从4开始;

附错误代码:

int maxTurbulenceSize(vector<int>& arr) {
    int len = arr.size();
    if (len == 1)
        return 1;
    int maxn = 1;
    int cnt = 0;
    int left = 0, right = 1;
    int flag = true;//true代表i<j,false代表i>j;
    for (; right < len;right++) {
        if (arr[right] == arr[left]) {
            left=right;
            cnt = max(maxn, cnt);
            continue;
        }
        if (right == 1) {
            //特殊条件,如果右指针在第二位;
            if (arr[left] < arr[right])
                flag = true;
            else
                flag = false;
            maxn ++;
            continue;
        }else {
            if (right == left + 1) {
                //特殊条件,如果右指针在第二位;
                if (arr[left] < arr[right])
                    flag = true;
                else
                    flag = false;
                maxn++;
                continue;
            }
            if ((!flag & arr[right] > arr[right - 1])||(flag & arr[right] < arr[right - 1])) {
                maxn = right - left + 1;
                flag = !flag;
            }
            else {
                left = right;
                cnt = max(maxn, cnt);
                maxn = 1;
            }
        }
    }
    return cnt;
}

如果采用三位比较,这样对于9,4,2,10,7,8;

对于判断4的时候,如果判断

 

当4不满足的时候,判断可以从4重新判断,而不会从2开始判断,更简单一点;

 

DP解法:

使用dp,维护两个数组来进行遍历;

 所以,状态转移方程为:

int maxTurbulenceSize(vector<int>& arr) {
	int n = arr.size();
	if (n < 2)
		return n;
	vector<int>up(n);
	vector<int>down(n);
	int res = 1;
	up[0] = down[0] = 1;
	for (int i = 1; i < n; i++) {
		if (arr[i - 1] < arr[i]) {
			up[i] = down[i - 1] + 1;
			down[i] = 1;
		}
		else if (arr[i - 1] > arr[i]) {
			down[i] = up[i - 1] + 1;
			up[i] = 1;
		}
		else {
			up[i] = 1;
			down[i] = 1;
		}
		res = max(res, max(up[i], down[i]));
	}
	return res;
}

 

posted @ 2021-02-08 23:34  暮云林凌  阅读(77)  评论(0编辑  收藏  举报