问题描述
- 关于一道OJ水牛排队的水题, 请问大神们能不能告诉我除了常规思路,有没有简单一点的方法
-
Description (C语言)
John这个农民养了N头牛 ( 1 ≤ N ≤ 1000 )。有一天,他把牛排成一行,每头牛都有一个"品种编码",例如,水牛的编码都是1,黄牛是2,奶牛是3,等等,它们随机分布在这一行中。第i头牛的品种记录在数组B[i]中。农民John希望这一行牛中如果有连续一片品种相同的牛放在一起,看起来就更加爽心悦目了。于是他从这一排牛中拿走某个品种的牛,以便创造出这样的一片。请你帮他计算一下,如果拿走某个品种的牛后,所能得到最多的品种相同的连续的牛有多少头。
Input
第一行:总的牛的数量N第二行至N+1行:每行是一个正整数B[i],表示第i头牛的品种。0 ≤ B[i] ≤ 1,000,000
Output
输出一个正整数a,表示John所能制造出的拥有相同品种的连续的牛的最大数量。Sample Input
9
2
7
3
7
7
3
7
5
7Sample Output
4Hint
Sample Input的解释:一共有9头牛,排成一行后的品种分别是 2, 7, 3, 7, 7, 3, 7, 5, 7Sample Output的解释:拿掉所有品种为3的牛后,这行牛变成 2, 7, 7, 7, 7, 5, 7,这样,就有连续4头牛的品种是7了。
如果拿掉2,就变成 7, 3, 7, 7, 3, 7, 5, 7 ,最多只有2头品种为7的牛连续在一起;
如果拿掉7,就变成 2, 3, 3, 5 ,就最多只有2头品种为3的牛连续在一起;
如果拿掉5,就变成 2, 7, 3, 7, 7, 3, 7, 7 ,也是最多只有2头品种为7的牛连续在一起;
所以,能够得到的最大连续品种的牛的数量是4。
解决方案
1、找出共有几个品种,即多少个不同的数字;
2、删掉一个品种,计算最大连续数;
3、确定哪个品种连续数最大。
这是常规思路。好像没什么简单算法。
解决方案二:
无论如何都需要遍历一次数组
解决方案三:
1、找出共有几个品种,即多少个不同的数字;
2、删掉一个品种,计算最大连续数;
3、确定哪个品种连续数最大。
这是常规思路。好像没什么简单算法。