`
yeshaoting
  • 浏览: 668422 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

找出数组中重复次数最多的元素并打印

    博客分类:
  • J2SE
阅读更多


 

问题: 找出数组中重复次数最多的元素并打印


 

程序实现:

 

 

/**
 * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC)
 * All rights reserved.
 * Author: Jarg Yee <yeshaoting@gmail.com>
 * http://jarg.iteye.com/
 */
import java.util.*;
import java.util.Map.*;
/*
 * 找出数组中重复次数最多的元素并打印
 * ---------------------------------------------------------------------
 * 1. 排序原始数组,采用二个变量记录相邻值不同的元素值,
 *	  二个变量记录相邻值不同的元素值出现次数
 *    保留元素值出现次数多的那个,继续在原始数组中搜寻
 * ---------------------------------------------------------------------
 * 2. 定义一个数据结构,包含数组元素值和其出现次数
 *    遍历数组,若数组元素不存在于该数据结构中,则添加并设置出现次数为1;
 *    否则,修改该数据结构元素出现次数,次数+1
 *    最后,遍历该数据结构,找出出现次数最多的元素.
 */
public class MostNum
{
	/** for debugging. */
	public static void main(String[] args)
	{
		int[] arr = {7,3,1,4,3,6,2,8,3,2,2,2,3,4,2};
		if(arr.length==0)
		{
			System.out.println("等查找的数组为空.");
			return;
		}
		method1(arr.clone());
		method2(arr);
	}

	//method 1
	public static void method1(int[] arr)
	{
		Arrays.sort(arr);	//升序

		//value,value_new值-1,为了使程序进入"不同元素值过渡"
		int count=0, value=arr[0]-1;			//保存最优元素信息
		int count_new=0, value_new=arr[0]-1;	//保存新搜寻元素信息
		for(int i=0; i<arr.length; i++)
		{
			//连续相同的元素值
			if(arr[i]==value_new)
			{
				count_new++;
			}

			//不同元素值过渡或者扫描到数组末尾
			if(arr[i]!=value_new || i == arr.length-1)
			{
				//若新的元素值计数大于目前最优元素值计数时,更新
				if(count_new>count)
				{
					count = count_new;
					value = value_new;
				}

				//新的元素值
				value_new = arr[i];
				count_new = 1;
			}
			
		}
		display(value, count);
	}

	//method 2
	public static void method2(int[] arr)
	{
		Map<Integer,Integer> map = new HashMap<Integer,Integer>();

		//遍历数组,记录相同数组值出现次数并存储在数据结构中
		for(int i=0; i<arr.length; i++)
		{
			if(map.containsKey(arr[i]))
				map.put(arr[i], map.get(arr[i])+1);
			else
				map.put(arr[i], 1);
		}
		
		//遍历数据结构,找出出现次数最多的元素.
		Set<Entry<Integer,Integer>> set = map.entrySet();
		Iterator<Entry<Integer,Integer>> it = set.iterator();
		boolean flag = true;	//判断是否第一次迭代
		int key = 0, value = 0;
		while(it.hasNext())
		{
			Entry<Integer,Integer> e = it.next();

			//第一次遍历数据结构,先初始化key,value
			if(flag)
			{
				key = e.getKey();
				value = e.getValue();
				flag = false;
				continue;
			}

			//当前元素出现次数大于当前最优值的情况
			if(e.getValue()>value)
			{
				key = e.getKey();
				value = e.getValue();
			}
		}
		display(key, value);
	}

	//显示结果
	public static void display(int key, int value)
	{
		System.out.println("重复次数最多元素:" + key + "\t重复次数:" + value);
	}
}

 

 

 

 

分享到:
评论

相关推荐

    leetcode数组中元素出现次数-Interview-Prepration:包含重要问题和面试概念的存储库

    leetcode数组中元素出现次数面试准备 LEETCODE 问题 二和 最小尺寸子阵列总和 两个有序数组的中位数 反转整数 盛水最多的容器 有效括号 从排序数组中删除重复项 删除元素 下一个排列 在旋转排序数组中搜索 搜索插入...

    leetcode数组下标大于间距-my-algorithm:我的算法

    找出数组中重复的数字 删除排序数组中的重复项,在原数组上操作 有序数组两数之和 移除数组中所有值为val的元素 调整数组顺序使奇数位于偶数前面 数组中出现次数超过一半的数字 最小的k个数 数组中的第K个最大元素 ...

    javascript入门笔记

    5、在控制台中打印输出 半径为 * 的圆的周长是 * 半径为 * 的圆的面积是 * 笔记本名称:ThinkPad E460 笔记本价格:3000 笔记本库存:100台 1、运算符 1、位运算符 1、作用 将数字转换为二进制后...

    lrucacheleetcode-LeetcodeTest:用来刷题

    lru cache leetcode LeetcodeTest 菜就得多看书,多学习 刷题 评价 记住多刷题,多刷题,...第二次直接找出次数出现一次的字符 51、 Leetcode部分 链表 二叉搜索 二叉搜索、快慢指针 字符串 KMP Manacher 难受 回溯 Ra

    数据结构(C++)有关练习题

    内容及步骤: 1、 设有一个线性表(e0,e1,e2,e3,…,en-2,en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原地址内容置换为(en-1,en-2,…,e3,...

    计算机二级C语言考试题预测

    (62) 栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是(D) A. ABCED B. DBCEA C. CDABE D. DCBEA (63) 线性表的顺序存储结构和线性表的链式存储结构分别是(B) A. 顺序...

    世界500强面试题.pdf

    1.2.5. 在二元树中找出和为某一值的所有路径 .............................................. 22 1.2.6. Top K 算法详细解析---百度面试 ......................................................... 29 1.2.7. ...

    C#编程经验技巧宝典

    76 &lt;br&gt;0111 计算字符串中子字符串出现的次数 76 &lt;br&gt;0112 获得字符串中大写字母的个数 77 &lt;br&gt;0113 获得某字符在字符串中最后出现的位置 78 &lt;br&gt;0114 如何找出字符串中某一字符的所有位置 78...

    java 经典习题.doc

    编程 找出1000以内的所有完数。 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 【程序11】 题目:有1、2、3、4个...

    Windows 系统错误代码简单分析

    注册表将不能读取、写出或刷新包含注册表系统映像的其中一个文件。  1017 系统试图将文件加载或还原到注册表中,但是,指定的文件不是注册表文件格式。  1018 试图在注册表键(已经标记为删除)中完成的操作...

    精易模块[源码] V5.15

    4、改善(字节集_取左边|取右边|取中间)与未公开子程序重复,改名为 字节集_寻找取左|字节集_寻找取右|字节集_寻找取中,并修正BUG。 5、公开子程序(字节集_到文本|字节集_到整数|字节集_取左边|字节集_取右边|...

    最新JAVA编程题全集_50题及答案

    题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class lianxi02 { public static ...

    1345个易语言模块

    取网页元素.ec 取 腾讯TT浏览器的地址栏文本模块.ec 取节气模块.ec 取试用数据.ec 取非系统进程全路径文件名.ec 变身_超级编辑 框.ec 变速模块(1.0).EC 古木_选择文件夹.ec 古木滑块条_免注册版.ec 句柄操作.ec 各类...

    1350多个精品易语言模块

    取网页元素.ec 取 腾讯TT浏览器的地址栏文本模块.ec 取节气模块.ec 取试用数据.ec 取非系统进程全路径文件名.ec 变身_超级编辑 框.ec 变速模块(1.0).EC 古木_选择文件夹.ec 古木滑块条_免注册版.ec 句柄操作.ec 各类...

Global site tag (gtag.js) - Google Analytics