双指针,遍历前进项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")