数组中出现最多的数,以及接口 Map.Entry<K,V>

 1 package test.tools;
 2
 3 import java.util.Collection;
 4 import java.util.Collections;
 5 import java.util.HashMap;
 6 import java.util.Map;
 7
 8 public class TestArr {
 9
10     public static void MaxCount(int[] arr) {
11         Map<Integer, Integer> map = new HashMap<Integer,Integer>();
12         for(int i=0; i<arr.length; i++) {
13             //数组中已经出现此数字,次数加1
14             if(map.containsKey(arr[i])){
15                 int count = map.get(arr[i]);
16                 /*HashMap不允许key重复*/
17                 //map.remove(arr[i]);
18                 map.put(arr[i], count+1);
19             }else{
20                 //数字首次出现,次数设置为1
21                 map.put(arr[i], 1);
22             }
23         }
24         System.err.println(map);
25         Collection<Integer> collection = map.values();
26             // 找出map的value中最大值
27             int maxCount = Collections.max(collection);
28             int num = 0;
29             for(Map.Entry<Integer, Integer> entry : map.entrySet()){
30                 //得到value为maxCount的key,也就是数组中出现次数最多的数字
31                 if(entry.getValue() == maxCount){
32                     num = entry.getKey();
33                 }
34             }
35             System.out.println("出现次数最多的数:" + num);
36             System.out.println("共出现" + maxCount + "次");
37
38     }
39
40     public static void main(String[] args) {
41         int[] arr = {1,2,3,4,1,1,1,2,2,5,4,6,7,8,3,3,5,5,5,5,1,1,1};
42         MaxCount(arr);
43     }
44 }

结果:

{1=7, 2=3, 3=3, 4=2, 5=5, 6=1, 7=1, 8=1}
出现次数最多的数:1
共出现7次

时间: 2024-12-13 14:40:15

数组中出现最多的数,以及接口 Map.Entry<K,V>的相关文章

jquery获取字符串中出现最多的数

//获取字符串中出现最多的数和它一共出现多少次 var str = 'asdfssaaasasasasaa'; //定义字符串 var json = {}; //定义数组用来存储每个字符元素所对应的个数 for (var i = 0; i < str.length; i++) { //遍历字符串中所有的元素 if (!json[str.charAt(i)]) { //判断当前元素是否已经在数组中存在 str.charAt(i)//当前元素 json[str.charAt(i)] = 1; //给

获取在一个数组中出现最多的字符及其所在的位置

获取在一个数组中出现最多的字符.个数及其所在的位置 <!DOCTYPE html> <html> <head> <title>一个数组中,出现次数最多的字符,及其位置</title> </head> <body> <script type="text/javascript"> var arr=["a","x","b","d

找到数组中唯一重复的数

#include<iostream> #include<algorithm> #include<numeric> using namespace std; int helper1(int a[],int n) { int sum = accumulate(a,a+n,0); int sum2 = n*(n-1)/2; return sum-sum2; } int helper2(int a[],int n) { int bitor = a[0]^0; for(int i

(算法)求数组中出现频率最高的数

不准备实现算法先,根据21题和前辈的经验,这道题的真正考核点不在于解决这个问题,而在于拿到这个问题以后题的问题. 正常的一个做法,一次扫描然后用HASHMAP进行一个统计,然后再扫描一次HASHMAP获得频率最高的数.时间是O(N)空间也是O(N). 还有一种是做排序,然后扫描一次根据下标计算可以得到频率最高的数(可以避免空间消耗?). (不知道是否还有别的做法?) 据说我们应该先问这个数组是否已经排序?(想得美) 然后是否已经知道这个数的大概出现频率(比如说超过一半) 是否可以用额外空间?是否

3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中

package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; /* * 3.键盘输入10个数,放到数组中 (1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中 */ public class Test3 { public static int[] arr = new int[10]; public static void

找出有序数组中绝对值最小的数

问题: 一个有序数组,值有可能有负值,也有可能没有,现需要找出其中绝对值最小的值. 方法1: 遍历数组,找到绝对值最小值,时间复杂度O(n),n为元素个数. 方法2: 二分查找,因为数组有序,可以利用二分查找,时间复杂度O(logn). 分析步骤: 如果第一个数为正数,说明整个数组没有负数,直接返回第一个数 如果最后一个数为负数,说明整个数组没有正数,直接返回最后一个数 数组元素有正有负,说明绝对值最小的元素肯定在正负数交界处,需要二分查找上场: 如果a[mid]<0,因为数组是升序,说明绝对值

有序二维数组中搜索特定的数

关于二维有序数组中搜索,其题目如下: 给定一个矩阵,都是整数,每一行从左到右升序,每一列从上到下有序,例如下面的矩阵 [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 请用最快的时间找出特定的数,例如,输入3,存在这个数,输入15,不存在这个数. 实现如下的函数bool FindArray(int *pArray,int nWidth,int nheight,int nKey). 最笨的方法是逐个遍历进行比较,如果是这样,这题目就没什么意义

数组中数目最多的三个数 2.3

是数组中超过一半数目问题的升级版,但万变不离其中 声明一个time数组和candidate数组,长度为3,分别存放三个数的次数和数字 首先次数声明为0,数字声明为不存在的数,这里暂时声明为-1,其实应该声明为一个不存在的数字 然后遍历数组 如果该数是第一个candidate,第一个candidate的time++ 如果是第二个,那么第二个time++; 然后也判断三个candidate的time是否达到0,如果达到,将更新candidate,更新为当前数字 最后返回candidate数组 pac

找出数组中唯一重复的数(转)

题目: 数组a[N],1至N-1这N-1个数存放在a[N]中,其中某个数重复一次.写一个函数,找出被重复的数字. 方法一:异或法. 数组a[N]中的N个数异或结果与1至N-1异或的结果再做异或,得到的值即为所求. 设重复数为A,其余N-2个数异或结果为B. N个数异或结果为A^A^B 1至N-1异或结果为A^B 由于异或满足交换律和结合律,且X^X = 0  0^X = X; 则有 (A^B)^(A^A^B)=A^B^B=A 代码: #include <stdio.h> #include &l