如何查找数列中超过一半的数

Posted fang-hao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查找数列中超过一半的数相关的知识,希望对你有一定的参考价值。

Q:给你一串数,问你串中出现次数超过一半的数是什么?

 

方法一:

当然是暴力啦,开一个数组记录每一个数出现了多少次,然后找数组中数值大于 n / 2 的数,开心的话还可以离散化一下喽。

 

方法二:

从现在开始我们要利用这一串数的性质了,如果一个数出现的次数超过了一半,那么我们如果吧这个数列进行排序,然后显然中间的数就是我们要找的数啦。

 

方法三:

这是最巧妙的一个办法:

我们现在定义一个数 j ,并且记录暂时的答案。

我们每次读入一个数,如果 j 是0,就把当前答案改成这个数。

如果当前的答案等于新读入的数,那么 j + + 。

如果当前的答案不等于新读入的数,那么 j - - 。

 

 

练习:

bzoj 2456

代码:

ps:用iostream会mle,玄学qwq

 1 #include<stdio.h>
 2 int main(){
 3     int n,a,j=0,ans;
 4     scanf("%d",&n);
 5     for(;n;n--){
 6         scanf("%d",&a);
 7         if(j==0){
 8             ans=a;
 9             j++;
10         }
11         else {
12             if(a!=ans){
13                 j--;
14             }
15             else j++;
16         }
17     }
18     printf("%d\n",ans);
19 }

 

以上是关于如何查找数列中超过一半的数的主要内容,如果未能解决你的问题,请参考以下文章

查找一个数组中超过一半的元素

剑指offer-数组中超过一半的数字

数组中超过一半的数字

在python中,如何更新CSV文件中超过5K行的值?

剑指offer二刷——数组专题——数组中出现次数超过一半的数字

1049. 数列的片段和(20)