我得到了String哈希值数组,例如:“123-51s-12as-dasd1-das-41c-sadasdgt-31”。我需要找出是否有任何重复。问题是,我需要在O(nlogn)中找到它们。
1)我的想法:
为此我可以使用二进制搜索算法。但二进制搜索仅适用于已排序的数字数组。所以我问:有没有办法对字符串数组进行排序?
2)我愿意接受任何其他答案。我的问题是: 如何查找未知字符串数组中的所有重复项 - nlogn。
答案 0 :(得分:6)
由于时间限制为nlog(n)
,您可以安全地首先对数组进行排序,然后从左到右进行扫描以检查重复的字符串。
答案 1 :(得分:0)
您可以使用Set<String>
并通过循环数组将字符串插入其中:遍历数组是O(n),插入是O(log(n))。如果.add()
返回false,则为重复:
public Set<String> getDups(String[] hashes)
{
Set<String> all = new HashSet<String>();
Set<String> ret = new HashSet<String>();
for (final String hash: hashes)
if (!all.add(hash)) // already seen
ret.add(hash);
return ret;
}