Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CodeForces问题中的歧义——HashSet与LinkedHashSet的使用_Java_Algorithm_Set_Hashset_Linkedhashset - Fatal编程技术网

Java CodeForces问题中的歧义——HashSet与LinkedHashSet的使用

Java CodeForces问题中的歧义——HashSet与LinkedHashSet的使用,java,algorithm,set,hashset,linkedhashset,Java,Algorithm,Set,Hashset,Linkedhashset,昨天我在解决一个代码部队的问题。问题的URL是 我将在下面简短地解释这个问题 给定一个二进制字符串,将其划分为最少数量的子序列 以这样一种方式,字符串的每个字符只属于一个字符 子序列和每个子序列看起来像“010101…”或“101010” …”,即子序列不应包含两个相邻的零或 一个) 现在,对于这个问题,我在昨天的比赛中提交了一个解决方案。这是最新的。它被临时接受,并且在最后的测试用例中获得了超过时间限制的状态 所以今天,我再次提交了另一份,通过了所有的案例 在第一个解决方案中,我使用了Hash

昨天我在解决一个代码部队的问题。问题的URL是

我将在下面简短地解释这个问题

给定一个二进制字符串,将其划分为最少数量的子序列 以这样一种方式,字符串的每个字符只属于一个字符 子序列和每个子序列看起来像“010101…”或“101010” …”,即子序列不应包含两个相邻的零或 一个)

现在,对于这个问题,我在昨天的比赛中提交了一个解决方案。这是最新的。它被临时接受,并且在最后的测试用例中获得了超过时间限制的状态

所以今天,我再次提交了另一份,通过了所有的案例


在第一个解决方案中,我使用了
HashSet
,在第二个解决方案中,我使用了
LinkedHashSet
。我想知道,为什么不清除所有的案例?这是否意味着每当我需要
Set
实现时,我都应该使用
LinkedHashSet
?我看了这篇文章,发现
HashSet
LinkedHashSet
性能更好。但是为什么我的代码在这里不起作用呢?

这个问题可能会得到更多关于Codeforces的回复,但无论如何我会在这里回答

竞赛结束后,Codeforces允许其他用户通过编写自定义输入来“破解”解决方案,以便在其他用户的程序上运行。如果防御用户的程序在自定义输入上运行缓慢,则其代码提交的状态将从“已接受”更改为“已超出时间限制”

具体来说,您的代码从“已接受”更改为“超出时间限制”的原因是有人创建了一个“反哈希测试”(一个哈希函数导致多次冲突的测试),您的程序在该测试上运行得比平时慢。如果您对这些测试是如何生成的感兴趣,您可以在Codeforces上找到几篇文章,比如下面这篇:

正如@Photon所链接的,在Codeforces上有一篇文章解释了为什么应该避免使用Java.HashSet和Java.HashMap:,这主要是由于反散列测试。在某些情况下,从平衡的BST中添加额外的
log(n)
因子可能没有那么糟糕(通过使用
TreeSet
TreeMap
)。在许多情况下,一个额外的
log(n)
因子不会使代码超时,它可以保护您免受反哈希测试的影响


如何确定您的算法是否足够快,可以添加
log(n)
因子?我想这需要一些经验,但大多数人建议进行某种计算。大多数在线判断(包括Codeforces)都会显示允许您的程序在特定问题上运行的时间(通常在1到4秒之间),并且您可以在执行计算时使用
10^9
每秒恒定时间操作作为经验法则。

@Photon这一个称为Java 6/7。也适用于Java8+吗?