思路: 是要找的元素,计数器加一,不是则减一,当计数器为0,说明相同的元素个数已经被不同元素个数抵消完,则换下一个元素,最后剩下的就是最多的那个数字
相当于不断从数组里删除不同的两个数(不管包不包含要找的过半数),到最后剩下的将全是相同的数字了,即要找的数字
#include<stdio.h>
int main(
void)
{
int arr[]={
1,
1,
1,
1,
1,
8,
2,
2,
2};
int n=
sizeof(arr)/
sizeof(
int);
int i,j;
int a=
0,b=
0;
for(i=
0;i<n;i++)
{
if(arr[i]==a)
{
a=arr[i];
b++;
}
else
{
if(b>
0) b--;
if(b==
0)
{
a=arr[i];
b=
1;
}
}
}
printf(
"%d \n",a);
}