1 条题解
-
2
稍微修改一下课上第一道OJ的代码就好了~注意这里要求的是同一个包裹中每种雪花最多有2片。小修改flag的改变条件。如果右指针对应雪花片数大于2,此时包裹不再满足条件,flag设置为0,然后尝试移动左指针。如果左指针对应雪花片数重新变为2,所以包裹重新满足条件,flag设置为1。
参考代码
#include<iostream> #include<cstring> using namespace std; int n, t, a[1000005]; int cnt[1000005]; int main() { cin >> t; while (t--) { int l = 1, r = 1, ans = -0x3f3f3f3f; bool flag = 1; memset(cnt, 0, sizeof(cnt)); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; cnt[a[1]] = 1; while (l <= r && r <= n) { if (flag == 1) { ans = max(ans, r - l + 1); r++; cnt[a[r]]++; if (cnt[a[r]] > 2) flag = 0; } else { cnt[a[l]]--; if (cnt[a[l]] == 2) flag = 1; l++; } } cout << ans << endl; } return 0; }
- 1
信息
- ID
- 685
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- (无)
- 递交数
- 57
- 已通过
- 44
- 上传者