【发布时间】:2015-09-20 20:10:13
【问题描述】:
我目前使用HashMap 来对应重复值及其重复次数。它的linear efficiency O(n) 但我正在寻找一些内置方法或更快的方法来计算数组中每个值的重复数(如O(log n))?
这是我目前的有效镜头:
String[] array = {"Henry", "Henry", "Henry", "Maxwell", "Maxwell"};
HashMap<String, Integer> duplicates = new HashMap<String, Integer>();
int numberOfDuplicates = 1;
for (int i = 0; i < array.length; i++)
{
if (duplicates.put(array[i], numberOfDuplicates) != null) // Duplicate Key
{
numberOfDuplicates++;
}
else // New Key
{
numberOfDuplicates = 1;
}
duplicates.put(array[i], numberOfDuplicates);
}
// Print out duplicate counts
for (String key : duplicates.keySet()) {
System.out.println(key + " " + duplicates.get(key));
}
更快的方式/务实的方式呢? 10Q。
【问题讨论】:
-
你不能比线性时间复杂度更快。
-
@Eran 好的,但是他们有任何内置方法吗?
-
如果没有损坏,请不要修复它。如果你已经达到了 O(n),就没有理由尝试改进它,而且标准 SDK 没有解决此问题的方法。不过,您的代码可能看起来会更好。
-
你想在这里达到什么目的?
-
您总是可以使用多重集,例如来自 Guava,但它基本上是在做同样的事情。
标签: java arrays algorithm duplicates