这题有三种解法:
1.利用hash表
2.先排序,然后通过一次遍历,找出最长子串。
下面详细介绍一下第3种方法:
先看源代码:
[cpp] #include
int main()
{
int ans, num, count, n;
while (scanf("%d", &n) != EOF)
{
count = 0;
for (int i=1; i<=n; i++)
{
scanf("%d", &ans);
if (count == 0)
{
num = ans;
count ++;
}
else
if (ans == num)
count++;
else count--;
}
printf("%d\n", num);
}
return 0;
}
#include
int main()
{
int ans, num, count, n;
while (scanf("%d", &n) != EOF)
{
count = 0;
for (int i=1; i<=n; i++)
{
scanf("%d", &ans);
if (count == 0)
{
num = ans;
count ++;
}
else
if (ans == num)
count++;
else count--;
}
printf("%d\n", num);
}
return 0;
} 解释:这题比较特殊,根据题意数目最多整数的个数是大于等于N/2+1,也就是会超过其他整数的个数之和。
count保存的是目前出现次数最多的整数 减去 其他整数的个数。由于总个数为奇数,结果count一定>=1。