您的位置:首页 > 其它

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ccf