三行代码搞定数组中出现次数超过一半的数字
<center>普林斯MemoryC</center>题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。
由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
利用Arrays工具类和IntStream流求解
- 排序,取中间的数字,设为i
- 用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(过滤规则)
可对流中的数据进行筛选