找出超过半数的那个数字

一、问题描述

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

二、解题思路

      1) 思路一(最简洁):

                       根据鸽笼原理,最差情况下,也会出现三个“该数字”连续排在一起,定义变量count,如果左右数据相同,

count++,并保存该数据。

                      

                       如果有符合条件的数字,则它出现的次数比其他所有数字出现的次数和还要多。

                       
       2)思路二(最常规):

                       通过Java自带的排序工具,将从小到大排序,中位数既是所求值。

                       
       3)思路三(最简单):

                       通过map,统计出现的最多值。

                       

三、注意事项

       1) 若数组中不含这类数据怎么处理?进行数据验证。

       

四、代码实现

        见我的github:找出超过半数的那个数字

猜你喜欢

转载自blog.csdn.net/lj6020382/article/details/81224031