CCF记录——出现次数最多的数
2016-04-14 01:24
375 查看
CCF记录——出现次数最多的数
先看题目:
标题 | 内容 |
---|---|
试题名称 | 出现最多的数 |
时间限制 | 1.0s |
内存限制 | 256m |
问题描述
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。样例输入
6 10 1 10 20 30 20
样例输出
10
自己使用的是Map
,参考答案使用的是数组,试了一下都是一百分,就都贴一下:
Map
方法:
package test; import java.util.*; public class FindMost1 { public static void main(String[] args) { Scanner keyin = new Scanner(System.in); int N = keyin.nextInt(); //获取整数的数量 Map<Integer, Integer> map = new TreeMap<>(new Comparator<Integer>() { //自定义Comparator进行从大到小比较 @Override public int compare(Integer o1, Integer o2) { return o1 - o2;//从大到小 } }); for (int i = 0; i < N; i++) { int n = keyin.nextInt(); if (map.containsKey(n)) { int count = map.get(n); count++; map.put(n, count); //利用treemap中重复建的数据会被后一个覆盖的特性 continue; } else { map.put(n, 0); } } Set<Integer> set = map.keySet(); Iterator<Integer> iterator = set.iterator(); int maxValue = -1; int result = -1; while (iterator.hasNext()) { int key = iterator.next(); int value = map.get(key); if (value > maxValue) { maxValue = value; result = key; } } System.out.println(result); } }
数组方法:
package test; import java.util.Scanner; public class FindMost2 { public static void main(String[] args) { Scanner keyIn = new Scanner(System.in); int N = keyIn.nextInt(); int[] nums = new int[10001]; for (int i = 0; i < N; i++) { int n = keyIn.nextInt(); int count = nums ; count++; nums = count; } int maxCount = -1; int result = -1; for (int i = 10000; i >= 0; i--) { if (nums[i] >= maxCount) { maxCount = nums[i]; result = i; } } System.out.println(result); } }
相关文章推荐