输入:
人名(唯一)及其分数。 我目前将它存储在一个hashmap
中HashMap<String, Integer> hmap = new HashMap<String, Integer>();
hmap.put(name, score)
在初始输入之后,可以通过传递名称和金额来增加分数。这也是一件相当容易的事情。
int removedVal = (Integer) hmap.remove(name); // removes the value
int newScore = removedVal + score; //adds new score to old
hmap.put(name, newScore) //stores back into hashmap
问题
我想允许用户输入一个数字,它将返回得分大于此类输入的人数。
当前hashmap中存储的分数不是唯一的,我将无法将它们存储在自己的反转映射中,因为重复的分数只会被计算一次。
TreeMap<Integer, String> tmap =
new TreeMap<Integer, String>(); //unique values would be lost
问题
找出哪些分数高于所需输入的最有效方法是什么?
我正在寻找最快的方式。
编辑:将存储在名称的哈希映射中,并且值的堆可以工作吗?
答案 0 :(得分:0)
分数有哪些可能值?
如果范围很小,可以说0到100,值是整数,那么你可以创建另一个地图score -> count
。每次向hmap
添加名称时,都会为分数插入/增加计数。这会增加较小的内存占用量并提供O(1)
性能,以获取大于某个分数的分数。
是的,它是O(1)
而不是O(n)
,因为随着您添加更多名称,处理时间不会增加。