28.数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
解法一:利用HashMap
import java.util.HashMap;public class Solution { public int MoreThanHalfNum_Solution(int [] array) { HashMapmap = new HashMap<>(); int length = array.length; if(length == 1) return array[0]; //此处用于当数组只有一个元素的时候,下面的代码对该情况无效 for(int i : array){ if(map.containsKey(i)){ if(map.get(i) == length/2) return i; map.put(i,map.get(i) + 1); }else{ map.put(i,1); } } return 0; }}
解法二:利用数组特点,重复次数超过一半的数字一定大于其它数字出现次数之和
public class Solution { public int MoreThanHalfNum_Solution(int [] array) { if(array == null || array.length == 0) return 0; int length = array.length; int result = array[0]; int times = 1; for(int i =1;i