您的位置:首页 > 编程语言 > C语言/C++

给有n个数的数组a,其中超过一半的数为一个定值,在不排序,不开额外数组情况下,以最高效的方法找出这个数。

2014-10-20 22:14 495 查看
题目:给有n个数的数组a,其中超过一半的数为一个定值,在不排序,不开额外数组情况下,以最高效的方法找出这个数。

这道题目在2014年人人网校园招聘笔试卷子出现过,估计对很多大牛来说此题太简单了。

解法:定义A用于记录返回值,B用于计数;

初始化:A=a[0],B=0;

A和B的状态变化请见以下代码,逻辑挺简单的,就不用文字叙述。这个方法的空间复杂度为O(1),时间复杂度为O(n)。

int findnum(int a[], int n)
{
int A=a[0];
int B=0;
for(int i=1;i<n;i++)
{
if(B==0)
{
if(a[i]!=a[i-1])
A=a[i];
else
B++;
}
else if(B>0)
{
if(a[i]!=a[i-1])
{
B--;
}
else B++;
}
}
return A;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐