问题: 找出数组中重复次数最多的元素并打印
程序实现:
/**
* 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数组中元素出现次数面试准备 LEETCODE 问题 二和 最小尺寸子阵列总和 两个有序数组的中位数 反转整数 盛水最多的容器 有效括号 从排序数组中删除重复项 删除元素 下一个排列 在旋转排序数组中搜索 搜索插入...
找出数组中重复的数字 删除排序数组中的重复项,在原数组上操作 有序数组两数之和 移除数组中所有值为val的元素 调整数组顺序使奇数位于偶数前面 数组中出现次数超过一半的数字 最小的k个数 数组中的第K个最大元素 ...
5、在控制台中打印输出 半径为 * 的圆的周长是 * 半径为 * 的圆的面积是 * 笔记本名称:ThinkPad E460 笔记本价格:3000 笔记本库存:100台 1、运算符 1、位运算符 1、作用 将数字转换为二进制后...
lru cache leetcode LeetcodeTest 菜就得多看书,多学习 刷题 评价 记住多刷题,多刷题,...第二次直接找出次数出现一次的字符 51、 Leetcode部分 链表 二叉搜索 二叉搜索、快慢指针 字符串 KMP Manacher 难受 回溯 Ra
内容及步骤: 1、 设有一个线性表(e0,e1,e2,e3,…,en-2,en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原地址内容置换为(en-1,en-2,…,e3,...
(62) 栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是(D) A. ABCED B. DBCEA C. CDABE D. DCBEA (63) 线性表的顺序存储结构和线性表的链式存储结构分别是(B) A. 顺序...
1.2.5. 在二元树中找出和为某一值的所有路径 .............................................. 22 1.2.6. Top K 算法详细解析---百度面试 ......................................................... 29 1.2.7. ...
76 <br>0111 计算字符串中子字符串出现的次数 76 <br>0112 获得字符串中大写字母的个数 77 <br>0113 获得某字符在字符串中最后出现的位置 78 <br>0114 如何找出字符串中某一字符的所有位置 78...
编程 找出1000以内的所有完数。 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 【程序11】 题目:有1、2、3、4个...
注册表将不能读取、写出或刷新包含注册表系统映像的其中一个文件。 1017 系统试图将文件加载或还原到注册表中,但是,指定的文件不是注册表文件格式。 1018 试图在注册表键(已经标记为删除)中完成的操作...
4、改善(字节集_取左边|取右边|取中间)与未公开子程序重复,改名为 字节集_寻找取左|字节集_寻找取右|字节集_寻找取中,并修正BUG。 5、公开子程序(字节集_到文本|字节集_到整数|字节集_取左边|字节集_取右边|...
题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class lianxi02 { public static ...
取网页元素.ec 取 腾讯TT浏览器的地址栏文本模块.ec 取节气模块.ec 取试用数据.ec 取非系统进程全路径文件名.ec 变身_超级编辑 框.ec 变速模块(1.0).EC 古木_选择文件夹.ec 古木滑块条_免注册版.ec 句柄操作.ec 各类...
取网页元素.ec 取 腾讯TT浏览器的地址栏文本模块.ec 取节气模块.ec 取试用数据.ec 取非系统进程全路径文件名.ec 变身_超级编辑 框.ec 变速模块(1.0).EC 古木_选择文件夹.ec 古木滑块条_免注册版.ec 句柄操作.ec 各类...