主要思想:
相邻元素两两比较,如果相同存入新数组,不同二者都删除。如果 某数出现次数超高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