题目描述
我们定义一个由数字 0 和 1 组成的序列是交错序列,当且仅当在这个序列中 0 和 1 是轮流出现的,比如 0,010,10101都是交错序列。
现在给出了一个由数字 0 和 1 组成的序列A,它可能不是一个交错序列,但是你可以从这个序列中选择一些数字出来,按他们在序列A中原有的相对顺序排列(即选取A的一个子序列),使得最后你得到的是一个交错序列。问这样能得到的交错序列的最长长度是多少?
输入
第一行包含一个整数n,表示输入序列的长度。1 <= n <= 10^5
第二行包含n个 0 或 1,表示对应的序列。
输出
输出能够得到的最长交错序列的长度。
样例输入
Input Sample 1:
3
0 1 0
Input Sample 2:
8
1 1 0 0 1 1 0 0
样例输出
Output Sample 1:
3
Output Sample 2:
4
分析
我们要注意的是第二个输出的是 4,不要简单地选取子序列。
代码
#include <stdio.h>
int main()
{
int i;
int n;
scanf("%d", &n);
int input[n];
for (i = 0; i < n; i ++)
{
scanf("%d", &input[i]);
}
int temp = input[0];
int num = 1,maxnum = 0;
for (i = 1; i < n; i++)
{
if(input[i] != temp)
{
num++;
temp = input[i];
}
else
{
continue;
}
if (num > maxnum)
{
maxnum = num;
}
}
printf("%d ", maxnum);
return 0;
}