码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-07-24 13:23:59      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:color   item   中间   arrays   否则   ack   计数   不能   函数   

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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;
    }
}

 

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

标签:color   item   中间   arrays   否则   ack   计数   不能   函数   

原文地址:https://www.cnblogs.com/cstdio1/p/11237200.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!