双指针,遍历前进项right,left 根据否决条件收缩。 注意事项:记得更新 ans。

code

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    while (~scanf("%d", &n)) { 
        if (n == 1) { return 1;}

        vector<int> nums(n+1);
        for (int i = 0; i < n; ++i) {
            scanf("%d", &nums[i]);
        }

        int left = 0, right = 1;
        int ans = 1;
        // 2 -4 -2 3 2
        // 1
        for ( ; right < n; ++right) {
            int sub = nums[right]-nums[right-1];
            if (sub < 0) { sub = -sub;}
            if (sub > 1) {
                ans = max(ans, right-left);
                left = right;
            }
        }
        printf("%d\n", max(ans, right-left));
    }
}
// 64 位输出请用 printf("%lld")