【发布时间】:2014-02-23 07:21:35
【问题描述】:
我有一个 Hashmap,它链接存储为键的邮政编码和存储为哈希图中的值的人口。
hashmap 包含大约 33k 个条目。
我正在尝试从 5 个邮政编码中获取 5 个最高人口值,并打印出与 5 个最高人口相关的 5 个邮政编码,但我无法理解如何执行此操作的算法。
如果只有一个,那很容易,但 5 的限制给我带来了一些麻烦。
我知道将 5 个值存储在一个 int 数组中,并且我有一个计数器来确定何时存储其中的 5 个,但仅此而已。
谢谢
int populatedCounter = 0;
int[] populatedZip = new int[5];
it = zipCodePop.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pairs = (Map.Entry)it.next();
for (int i = 0; i < populatedZip.length; i++)
{
}
}
}
【问题讨论】:
-
Guava 这样的第三方库是公平游戏吗?这可能只是一行
Ordering.natural().greatestOf(map.values(), 5)。 -
如何创建一个 max_heap 值;删除最大值然后调整大小;获取下一个最大值,依此类推。
-
什么是邮编和人口(地图的参数是什么)?
Map<Integer, Integer>? -
这是作业吗?顺便说一句,另请参阅Finding the second highest number in array,它可以概括为找到 k 个最高数字。
-
算法:将前 5 个值添加到数组中,对数组进行排序,遍历映射,直到找到高于数组中第一个值(最低)的值,替换最低值,使用数组(如果新值高于其他值),继续。保留键/值对会花费更多精力,但应该足够简单。
标签: java