试图概念化正确的数据结构| Java的

时间:2018-02-23 03:51:55

标签: java time hash heap complexity-theory

输入:

人名(唯一)及其分数。 我目前将它存储在一个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

问题

找出哪些分数高于所需输入的最有效方法是什么?

我正在寻找最快的方式。

编辑:将存储在名称的哈希映射中,并且值的堆可以工作吗?

1 个答案:

答案 0 :(得分:0)

分数有哪些可能值?
如果范围很小,可以说0到100,值是整数,那么你可以创建另一个地图score -> count。每次向hmap添加名称时,都会为分数插入/增加计数。这会增加较小的内存占用量并提供O(1)性能,以获取大于某个分数的分数。
是的,它是O(1)而不是O(n),因为随着您添加更多名称,处理时间不会增加。