根据问题,我们必须找出一个元素是否出现超过 n/2 次,然后相应地打印 Yes 或 No。数字可以从 10^-3 到 10^3 不等。
我取了一个数组 count[2005],然后将 1000 添加到每个输入以使 10^-3 等于 0,即 -1000+1000=0,然后将 -1000 的出现次数存储在 count[0] 中,对于其余元素。因此,下限= -1000+1000=0;上限= 1000+1000=2000;
但我仍然遇到内存访问冲突。请帮助...这是原始问题的链接:http ://www.spoj.com/problems/MAJOR/
#include<stdio.h>
int main()
{
int t,n,a,count[2005],max,check,temp;
scanf("%d",&t);
while(t--)
{
check=0;
scanf("%d",&n);
for(int i=0;i<2005;i++)
count[i]=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a);
temp=a+1000;
count[temp]++;
if(count[temp]>(n/2))
{
check=1;
max=temp-1000;
break;
}
}
if(check==1)
printf("YES %d\n",max);
else
printf("NO\n");
}
return 0;
}