• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

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

 

posted @ 2013-09-12 23:03  Class Xman  阅读(255)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3