我在字节跳动一面碰到了这个问题,面试官示意用Map实现,复杂度O(n)。
//思路:用Map的Key存元素,Value存出现次数
public static int moreThanHalf(int[]arr){
Map<Integer,Integer>map=new HashMap<>();
int res=0;
if(arr==null || arr.length==0)
throw new IllegalArgumentException("Illegal Array. ");
map.put(arr[0],1);
for (int i=1; i<arr.length;i++ ) {
if(!map.containsKey(arr[i]))
map.put(arr[i],1);
else{
int count=map.get(arr[i]);
count+=1;
if(count>arr.length/2)
return arr[i];
map.put(arr[i],count);
}
}
throw new IllegalArgumentException("No MoreThanHalf Solution.");
}
//测试类
public class MoreThanHalf{
public static void main(String[] args) {
int []arr=new int[]{2,1,1,2,1,1,3};
int res=moreThanHalf(arr);
//输出 1
System.out.println(res);
}
}