给定n个数的数组a,其中超过一半数是一个定值,不进行排序,不开设额外数组,如何最高效找到这个数
int find(int *a,int n)
假如可以排序,排序后直接输出中间的数就可,在不能排序的情况下可以,先假设一个计数器,为0时直接假定下面取的数是这个数,然后与后面的数比较相等计数加一,不等减
#include<iostream>
#include<queue>
#include<stdio.h>
#include<algorithm>
using namespace std;
int find(int *a,int n)
{
int count=0;
int temp;
for(int i=0;i<n;i++)
{
if(count!=0)
{
if(temp==a[i])
count++;
else
count--;
}
else
{
temp=a[i];
count++;
}
}
return temp;
}
int main()
{
int a[]={2,3,3,5,3,1,2,3,3};
cout<<find(a,sizeof(a)/sizeof(a[0]));
}