题目描述:给定一个数组a然后返回数组a中出现次数大于一半的元素。
解析:这道题,我最初想的是用数组存每个元素出现的次数,通过索引或者哈希的方式,但是这样就要消耗空间复杂度。解析中第二种方法非常值得推荐,也是非常聪明和巧妙的方法,通过一个变量int num;记录数组中的a[x],然后int times;记录出现的次数,当num==a[i]的时候,++times;否则;如果times==0,则换num存放的数,否则times--;具体看代码
int MoreThanHalfNum(int *a,int len)
{
int times=0
int num=a[0]
int tmp
for(int i=1
{
if(num==a[i])
{
++times
}else
{
if(times==0)
{
num=a[i]
}else
{
times--
}
}
}
return num
}
int main()
{
int a[]={3,1,2,3,1,2,3,1,2,3}
int len=sizeof(a)/sizeof(a[0])
int ret=MoreThanHalfNum(a,len)
printf("%d\n",ret)
}