关注我,分享高质量每日一题题解~
b站同名账号分享力扣杯历届真题视频题解,也欢迎大家提出宝贵意见!
思路:模拟
连续休息时间可能跨天:我们把数组复制一遍,相当于把一天的末尾和第二天的开头连在一起。
然后,这个问题就变成了:求最长的连续为 $1$ 的子数组长度。遍历一遍即可。
代码(C++)
#include <bits/stdc++.h>
using namespace std;
int main() {
int T;
cin >> T;
while(T--) {
int n;
cin >> n;
// 数组复制一遍
vector<int> a(2 * n);
for(int i = 0; i < n; i++) {
cin >> a[i];
a[i + n] = a[i];
}
// ret: 结果 cnt:当前连续休息时间
int ret = 0, cnt = 0;
for(int i = 0; i < 2 * n; i++) {
if(a[i] == 0) {
ret = max(ret, cnt);
cnt = 0;
} else {
cnt++;
}
}
printf("%d\n", ret);
}
return 0;
}