存数据,如果最后一个数据是1,就从后往前遍历获取可以连接的时间,然后把这个数值存入第一个时间,再从头开始找最大长度
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int T;
int f[200050];
int main()
{
cin >> T;
while(T -- ){
int n;
cin >> n;
memset(f, 0, sizeof(f));
for(int i = 0; i < n; ++i){
cin >> f[i];
}
int count = 0;
if(f[n - 1] == 1){
for(int i = n - 1; ;--i ){
int j = i - 1;
while(f[j] == 1)j--;
count = i - j;
break;
}
}
if(f[0])f[0] += count;
int ans = 0;
for(int i = 0; i < n; ++i){
if(f[i] >= 1){
int j = i + 1;
while(f[j] == 1)j++;
ans = max(ans,f[i] + j - i - 1);
i = j;
}
}
cout << ans << endl;
}
return 0;
}