挑战CFF(java)——20131201
1 引言
准备9月考一下CCF,为了坚持住写个博客吧~先贴代码,有空来写思路总结。
2 题目
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
若有多个则输出最小的一个
3 代码(Java实现)
输入1:
import java.util.*;
import java.util.Map.Entry;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int length = scanner.nextInt();
int[] num = new int[length];
for(int i = 0; i < length; i++) {
num[i] = scanner.nextInt();
}
scanner.close();
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Integer i: num) {
if(map.containsKey(i)) {
map.put(i, map.get(i)+1);
}else {
map.put(i, 1);
}
}
Set<Entry<Integer, Integer>> entrySet = map.entrySet();
Integer maxKey = 0;
Integer maxValue = 0;
for(Entry<Integer, Integer> en:entrySet) {
Integer currKey = en.getKey();
Integer currValue = en.getValue();
if(currValue >= maxValue) {
if(currValue == maxValue) {
maxKey = (currKey < maxKey)?currKey:maxKey;
}else {
maxKey = en.getKey();
maxValue = en.getValue();
}
}
}
System.out.println(maxKey);
}
}
输入2 官方网站上编译没通过 不知道后台是什么逻辑…
import java.util.*;
import java.util.Map.Entry;
public class Test201312_1 {
public static void main(String[] args) {
//--------------------经验------------------
// 需要从键盘输入多个参数,尽量把nextLine类型放前面,nextInt放后面,实在不行。
// nextInt后面要跟一个nextLine方法“消化”掉那个多余的字符串。
// int num = Integer.valueOf(str);
// 关于parseInt()和valueOf(),parseInt()返回int基本类型,而valueOf()后台调用了parseInt(),返回封装类型Integer.
// parseInt()效率更好
Scanner scanner = new Scanner(System.in);
int length = scanner.nextInt();
String temp = scanner.nextLine();//用来吸收掉nextInt结束之后 的回车符
String str = scanner.nextLine();//输入的字符串,nextLine方法读入一行(可以含有空格,next方法只读入一个)
scanner.close();
String[] string = new String[length];
if(str != null) {
string = str.trim().split("\\s");//字符串类型数组
int b=0;
Integer[] num = new Integer[length];
for(String s:string) {
num[b++]= Integer.parseInt(s);
}
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Integer i: num) {
if(i > 10000 || i < 1) {
return;
}else if(map.containsKey(i)) {
map.put(i, map.get(i)+1);
}else {
map.put(i, 1);
}
}
Set<Entry<Integer, Integer>> entrySet = map.entrySet();
Integer maxKey = 0;
Integer maxValue = 0;
for(Entry<Integer, Integer> en:entrySet) {
Integer currKey = en.getKey();
Integer currValue = en.getValue();
if(currValue >= maxValue) {
if(currValue == maxValue) {
maxKey = (currKey < maxKey)?currKey:maxKey;
}else {
maxKey = en.getKey();
maxValue = en.getValue();
}
}
}
System.out.println(maxKey);
}
}
}