剑指offer:29.使用Map找出数组中出现次数超过数组长度一半的元素

我在字节跳动一面碰到了这个问题,面试官示意用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);
	}
}

猜你喜欢

转载自blog.csdn.net/waS_TransvolnoS/article/details/93175977