马蜂窝笔试编程题
晚了20分钟参加考试,心态炸裂。。。。编程题到最后也只做了第一题。不知道大家怎么做的。
我的如下:
package 马蜂窝;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;
/**
* 如果不存在记录,则修改城市数据
* @author phion_yan
*
*/
public class 统计 {
static class Record{
public Record(String city , int uid) {
this.city = city;
this.uid = uid;
} @Override public boolean equals(Object obj) {
return ((Record)obj).uid == this.uid&&
((Record)obj).city.equals(this.city);
} @Override public int hashCode() {
return uid;
}
String city = "";
int uid = 0;
}
static class City implements Comparable<City>{
public City(String name,int users){
this.name = name;
this.users = users;
}
int users = 0;
String name=""; @Override public int compareTo(City o) {
if(o.users>this.users) {
return 1;
}else if(o.users<this.users) {
return -1;
}else {
return this.name.compareTo(o.name);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String[] strs = line.split(" ");
Map<String,City> cityMap = new TreeMap<String,City>();
HashMap<Record,Integer> recordMap = new HashMap<>();
PriorityQueue<City> citys = new PriorityQueue<City>(new Comparator<City>() { @Override public int compare(City o1, City o2) {
return o1.compareTo(o2);
}
});
for(int i = 0 ; i< strs.length ; i++) {
String[] data = strs[i].split("-");
int uid = Integer.parseInt(data[0]);
String city = data[1];
Record r = new Record(city, uid);
if(recordMap.containsKey(r)) {
continue;
}else {
City c = null;
if(cityMap.containsKey(city)) {
c = new City(city, cityMap.get(city).users+1);
}else {
c = new City(city, 1);
}
cityMap.put(city, c);
recordMap.put(r, 1);
}
}
Iterator i = cityMap.entrySet().iterator();
while(i.hasNext()) {
Map.Entry<String,City> entry = (Entry<String, City>) i.next();
citys.add(entry.getValue());
}
for(int j = 0 ; j < 3 ; j++) {
if(citys.isEmpty()) return;
City c = citys.remove();
System.out.println(c.name+" "+c.users);
}
}
}

查看8道真题和解析