小b有一个01序列,她想找到一个最长的区间使得这个区间的01能两两配对,即0的个数和1的个数相等。求最长区间的长度。
输入
第一行一个正整数n,表示数组长度,其中0<n≤50000; 第二行n个0或1,以空格隔开。
输出
输出一个数,表示最长区间的长度
输入样例
3
0 1 0
输出样例
2
枚举
代码:
#include <iostream> #include <cstdlib> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; int n; int s[50000]; int main() { scanf("%d",&n); int c = 0,m = 0; for(int i = 0;i < n;i ++) { scanf("%d",&s[i]); c += (s[i] == 0) ? -1 : 1; int cc = c; for(int j = 0;j < i;j ++) { if(cc == 0) { m = max(m,i + 1 - j); break; } cc -= (s[j] == 0) ? -1 : 1; } } printf("%d",m); return 0; }
如果觉得有帮助,点个推荐啦~