/*
寻找发帖水王:
本质:寻找出现超过一半次数的人
如果已经排序,那么中序数就是那个人,即下标是,这个列表的第n/2项是(从0开始编号)。如果每次删除两个不同的id,可以降低时间复杂度
输入:
7
1 2 3 2 4 2 2
8
1 2 3 2 4 2 2 5
输出:
2
没有
*/
#include <stdio.h>
const int MAXSIZE = 10000;
void halfTimesNum(int* pArr,int iLen)
{
int iTimes = 1;
int iRes = pArr[0];
for(int i = 1 ; i < iLen ; i++)
{
if(pArr[i-1] != pArr[i])//如果当前数和原来的数不同,则另值变为累减,并使结果值为当前值
{
iTimes--;
if(iTimes <= 0)
{
iRes = pArr[i];
iTimes = 1;
}
}
else//如果前后两个数相同,就令值进行累加
{
iTimes++;
}
}
if(iTimes >= 2)
{
printf("%d\n",iRes);
}
else
{
printf("没有\n");
}
}
void process()
{
int n;
while(EOF != scanf("%d",&n))
{
int iArr[MAXSIZE];
for(int i = 0 ; i < n ; i++)
{
scanf("%d",&iArr[i]);
}
halfTimesNum(iArr,n);
}
}
int main(int argc,char* argv[])
{
process();
getchar();
return 0;
}
编程之美:第二章 数字之魅 2.3寻找发帖水王
最新推荐文章于 2021-02-12 19:26:59 发布