找到出现次数超过一半的数字

#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");
}

posted @ 2015-09-19 22:34  小左手  阅读(46)  评论(0)    收藏  举报