如何查找数列中超过一半的数
Posted fang-hao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查找数列中超过一半的数相关的知识,希望对你有一定的参考价值。
Q:给你一串数,问你串中出现次数超过一半的数是什么?
方法一:
当然是暴力啦,开一个数组记录每一个数出现了多少次,然后找数组中数值大于 n / 2 的数,开心的话还可以离散化一下喽。
方法二:
从现在开始我们要利用这一串数的性质了,如果一个数出现的次数超过了一半,那么我们如果吧这个数列进行排序,然后显然中间的数就是我们要找的数啦。
方法三:
这是最巧妙的一个办法:
我们现在定义一个数 j ,并且记录暂时的答案。
我们每次读入一个数,如果 j 是0,就把当前答案改成这个数。
如果当前的答案等于新读入的数,那么 j + + 。
如果当前的答案不等于新读入的数,那么 j - - 。
练习:
代码:
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 }
以上是关于如何查找数列中超过一半的数的主要内容,如果未能解决你的问题,请参考以下文章