//http://acm.hdu.edu.cn/showproblem.php?pid=1029
// 这是解法1:直接利用hash就可以快速AC
#include<stdio.h>
#include<string.h>
int main()
{
int n,hash[50000],tem,i,j;
while(scanf("%d",&n)!=EOF)
{
memset(hash,0,sizeof(hash));
for(i=1;i<=n;i++)
{
scanf("%d",&tem);
hash[tem]++;
if(hash[tem]>=(n+1)/2)
// 这里开始没有注意到,就是一直wa
/*
其代码是
for(i=1;i<=n;i++)
{
scanf("%d",&tem);
hash[tem]++;
}
for(i=1;i<=n;i++)
{
if(hash[i]>(n+1)/2)
j=i;
}
怎么当时就是没有发现呢?,一直都是wa,仔细想想,这也弱暴了,输入的tem,可能不在1--n之间
,所以一直都是wa,唉,水平还是那么差
*/
j=tem;
}
printf("%d\n",j);
}
return 0;
}
//解法2: 至今都没有看懂 是在网上看到的
#include <stdio.h>
#include <stdlib.h>
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;
}
// 解法3 因为题目说是找众数(难道还要大于一半的?),所以排序后找出最中间的一个数字一定是
//代码暂无,主要就是利用sort函数去解决题目,但是不是sort常见的递排序,而是递减拍戏,中间
//的a[(n+1)/2] 才是我们要求的那个数字
hdu 1029
最新推荐文章于 2022-08-21 09:40:25 发布