Java算法——O(n)查询数列中出现超过半数的元素

主要思想:

相邻元素两两比较,如果相同存入新数组,不同二者都删除。如果 某数出现次数超高n/2,则最后剩下的1元素为所求。

public static int findMostElem(final ArrayList<Integer> arr){
		int size = arr.size();
		ArrayList<Integer> tmplist = (ArrayList<Integer>) arr.clone();//复制数组
		while(tmplist.size() > 1){
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			for(int i=0; i < tmplist.size()-1; i += 2){
				if(arr.get(i)==arr.get(i+1)){
					tmp.add(arr.get(i));
				}
			}
			tmplist = (ArrayList<Integer>) tmp.clone();
		}
		System.out.println(tmplist.size());
		return tmplist.get(0);
	}













参考:

http://hi.baidu.com/nicker2010/item/b6ec0ee4d25a8a058c3ea8ea

原文地址:https://www.cnblogs.com/james1207/p/3318171.html