找到出现次数超过一半的数字
#include<stdio.h>
#include<iostream>
using namespace std;
/*
解法一:
利用数组的性质,他出现的次数比其他全部都多,所以声明两个变量,一个flag记录数字,一个记录个数,如果下个数字与他不同,则--;相同则++;若《=0;则将flag设为下一个数字
*/
int findMax(int *a,int len)
{
if(a==NULL||len==0)
return -1;
int flag=a[0];
int count=1;
for(int i=1;i<len;i++)
{
if(a[i]==flag)
{
count++;
}
else
{
count--;
}
if(count<=0)
{
flag=a[++i];
count=1;
}
}
return flag;
}
int main()
{
int a[5]={2,22,2,2,9};
int res=findMax(a,5);
cout<<res;
system("pause");
}

浙公网安备 33010602011771号