算法训练 出现次数最多的整数 java实现

本文介绍了一个Java程序,用于读取一组按升序排列的整数,并找出出现频率最高的元素。若多个元素出现次数相同,则输出较小的值。程序采用HashMap统计元素频次,利用Collections.sort()进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  问题描述
  编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
  输入格式:第一行是一个整数NN £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
  输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例

样例输入

5
100
150
150
200
250

样例输出

150

解析:这道题挺简单的,之所以发上来,主要是运用了HashMap 还有集合运算排序collections.sort(); 就相当于c++中的Map和sort(a,sizieof(a),cmp);

主要参考了如下博客:

Collections.sort对List排序的两种方法

https://blog.youkuaiyun.com/wxx614817/article/details/50628197

Map.EntrySet的用法

https://blog.youkuaiyun.com/nuoshueihe/article/details/7874069

话不多说,上代码:



import java.math.BigInteger;
import java.util.ArrayList;   
import java.util.Collections;  
import java.util.Comparator;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		int n;
		Scanner cin=new Scanner(System.in);
		n=cin.nextInt();
		if(n<=0) return ;//n<=0时不输出
		
		Map<BigInteger, Integer> map=new HashMap<BigInteger,Integer>();
		for(int i=0;i<n;i++)
		{
			BigInteger k=cin.nextBigInteger();
			if(map.containsKey(k))
				map.replace(k,map.get(k)+1);
			else
				map.put(k, 1);
		}
		//将map.entrySet()转换成list  
		List<Map.Entry<BigInteger, Integer>> list =new ArrayList<Map.Entry<BigInteger, Integer>>(map.entrySet());
		//排序
		Collections.sort(list, new Comparator<Map.Entry<BigInteger, Integer>>() {   
		    public int compare(Map.Entry<BigInteger, Integer> o1, Map.Entry<BigInteger, Integer> o2) {      
		       if(o1.getValue()==o2.getValue())
//值相等,按key从小到大排列   compare相当于c++中的小于号
		    	   return (o1.getKey()).compareTo(o2.getKey());
		       else
		    	   return (o2.getValue()).compareTo(o1.getValue());
//如果对应值不等,按值从大到小排列
				    }
				}); 
		
		System.out.println(list.get(0).getKey());
		cin.close();
		return;
       /* int count=0;
        for (Map.Entry<Integer, Integer> mapping : list) {  
            System.out.println(mapping.getKey());
            count++;
            if(count==1) break;
        }  */
         //显示
		/*for (int i = 0; i < list.size(); i++) {
		    Entry<Integer, Integer> id = list.get(i);
		    System.out.println(id);
		}*/
		
	}

}

测试样例:

详细记录
评测点序号评测结果得分CPU使用内存使用下载评测数据
1正确10.00234ms21.14MB输入 输出
2正确10.00203ms21.19MBVIP特权
3正确10.00250ms21.24MBVIP特权
4正确10.00171ms20.97MBVIP特权
5正确10.00234ms21.06MBVIP特权
6正确10.00359ms20.93MBVIP特权
7正确10.00234ms21.06MBVIP特权
8正确10.00203ms21.25MBVIP特权
9正确10.00234ms20.98MBVIP特权
10正确10.00281ms21.11MBVIP特权

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值