三行代码搞定数组中出现次数超过一半的数字

<center>普林斯MemoryC</center>

题目

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

利用Arrays工具类和IntStream流求解

  1. 排序,取中间的数字,设为i
  2. 用i过滤数组,如果为i的个数超过半数,则i为所求,否则结果为0

代码如下

public int MoreThanHalfNum_Solution(int [] array) {
    Arrays.sort(array);
    int i=array[array.length/2];
    return IntStream.of(array).filter(k->k==i).count()>array.length/2?i:0;
}

实用技巧

  • Arrays.sort(array);可以对数组进行排序
  • Stream实例.filter(过滤规则)可对流中的数据进行筛选