//极度恶心。。。
public class AllOne {
private Map<String,Integer> map;//字符串及其数量
private Map<Integer, Set<String>> hash;//某个数量的字符串集合
private int max;//最大最小数量
private int min;
public AllOne() {
map=new HashMap<>();
hash=new TreeMap<>();
max=0;
min=Integer.MAX_VALUE;
}
public void inc(String key) {
if(map.containsKey(key)){
hash.get(map.get(key)).remove(key);
if(hash.get(map.get(key)).isEmpty())
hash.remove(map.get(key));
if(hash.containsKey(map.get(key)+1))
hash.get(map.get(key)+1).add(key);
else {
Set<String> tmp=new HashSet<>();
tmp.add(key);
hash.put(map.get(key)+1,tmp);
}
map.put(key,map.get(key)+1);
}else {
if(hash.containsKey(1))
hash.get(1).add(key);
else {
Set<String> tmp=new HashSet<>();
tmp.add(key);
hash.put(1,tmp);
}
map.put(key,1);
}
Integer[] keys=hash.keySet().toArray(new Integer[0]);
if(keys.length==0){
min=Integer.MAX_VALUE;
max=0;
}else {
min=keys[0];
max=keys[keys.length-1];
}
}
public void dec(String key) {
if(map.get(key)==1){
hash.get(1).remove(key);
if(hash.get(1).isEmpty()){
hash.remove(1);
}
map.remove(key);
} else {
hash.get(map.get(key)).remove(key);
if(hash.get(map.get(key)).isEmpty()){
hash.remove(map.get(key));
}
if(!hash.containsKey(map.get(key)-1)){
Set<String> tmp=new HashSet<>();
tmp.add(key);
hash.put(map.get(key)-1,tmp);
}else hash.get(map.get(key)-1).add(key);
map.put(key,map.get(key)-1);
}
Integer[] keys=hash.keySet().toArray(new Integer[0]);
if(keys.length==0){
min=Integer.MAX_VALUE;
max=0;
}else {
min=keys[0];
max=keys[keys.length-1];
}
}
public String getMaxKey() {
if(max==0)
return "";
else return hash.get(max).toArray(new String[0])[0];
}
public String getMinKey() {
if(min==Integer.MAX_VALUE)
return "";
else return hash.get(min).toArray(new String[0])[0];
}
}
|