数组中出现次数超过一半的数

Posted cstdio1

tags:

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

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组1,2,3,2,2,2,5,4,2。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

类似于桶排序的思路:

弊端:数组中的值不能过大,否则必须开辟很大的空间(或者得构造函数去进行离散处理)

Java代码如下:

public class Solution 
    public int MoreThanHalfNum_Solution(int [] b) 
    int a[]=new int [100];
    for(int i=0;i<b.length;i++)
        a[b[i]]++;
    
      for(int i=0;i<100;i++)
          if(a[i]>b.length/2)
              return i;
          
      return 0;
    

 排序之后,如果存在超过一般长度的数,那么这个数一定是中间的这个数,所以用中间的数作为标准进行比较,如果相等计数器+1;

Java代码如下:

import java.util.*;
public class Solution 
    public int MoreThanHalfNum_Solution(int [] array) 
        int len=array.length;
        if(len<1)
            return 0;
        
        int count=0;
        Arrays.sort(array);
        int num=array[len/2];
        for(int i=0;i<len;i++)
            if(num==array[i])
                count++;
        
        if(count<=(len/2))
            num=0;
        
        return num;
    

 

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

剑指Offer 39 - 数组中出现次数超过一半的数

28:出现次数超过一半的数

数组中出现次数超过一半的数字

c++题目:求出现次数超过一半的数

数组中出现次数超过一半的数

如何找出数组中出现次数超过长度一半的元素