7-32 找到出勤最多的人-hebust (15 分)

根据教师的花名册,找到出勤最多的人。

输入格式:

出勤记录单行给出,数据直接使用空格分割。

输出格式:

单行输出(若有多人,人名直接使用空格分割,结尾处没有空格)。

输入样例:

在这里给出一组输入。例如:

zs ls ww ml zs ls ml zs ww

输出样例:

在这里给出相应的输出。例如:

zs

参考答案

import java.util.*;

class Main{
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
Map<String, Integer> map = new TreeMap();
TreeSet ts = new TreeSet();
int max = 0;

String str_name = cin.nextLine();
String []name_str = str_name.split(" ");

for( int i = 0; i < name_str.length; i ++ ){
int t = ts.size();
ts.add(name_str[i]);
if( t == ts.size() ){ // 表示有重复
if ( map.get(name_str[i]) + 1 > max){
max = map.get(name_str[i]) + 1;
}
map.put( name_str[i], map.get(name_str[i]) + 1); // 更新map中的值
}
else{
map.put(name_str[i], 1 );
}
}
String []cnt_name_people = new String[ts.size()];
int cnt = 0;
for( Map.Entry<String, Integer> entry: map.entrySet()){
String key = entry.getKey();
int value = entry.getValue();

if( max == 0){// 全部出勤1次,特殊情况
cnt_name_people[cnt ++ ] = key;
}
else if( value == max ){
cnt_name_people[cnt ++ ] = key;
}
}
for( int i = 0; i < cnt - 1; i ++ ){
System.out.print(cnt_name_people[i] + " ");
}
System.out.println(cnt_name_people[cnt -1 ]);
cin.close();
}
}