Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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 在集合中查找一个元素,该元素在找到另一项后可能变得相关_Java_Algorithm - Fatal编程技术网

Java 在集合中查找一个元素,该元素在找到另一项后可能变得相关

Java 在集合中查找一个元素,该元素在找到另一项后可能变得相关,java,algorithm,Java,Algorithm,对于下面的问题,我一直很难想出一个有效的算法,我想知道这里是否有人能帮我解决这个问题。不,这不是家庭作业。感谢您的帮助 假设我有一个包含以下元素的集合:{a,B,C,D,….Z} 每个元素都有某些可以满足的锁定要求,满足这些要求可以解锁集合中的其他元素 最初,在循环遍历集合时,元素A被锁定,但集合上的后续迭代将我带到元素D,在处理元素D之后,我获得了能够使用元素A的所需组件。类似地,元素L最初被锁定,但在处理元素O之后,元素L可以被处理 除了在集合上循环两次或反向,并对集合进行排序外,还有其他方

对于下面的问题,我一直很难想出一个有效的算法,我想知道这里是否有人能帮我解决这个问题。不,这不是家庭作业。感谢您的帮助

假设我有一个包含以下元素的集合:{a,B,C,D,….Z}

每个元素都有某些可以满足的锁定要求,满足这些要求可以解锁集合中的其他元素

最初,在循环遍历集合时,元素A被锁定,但集合上的后续迭代将我带到元素D,在处理元素D之后,我获得了能够使用元素A的所需组件。类似地,元素L最初被锁定,但在处理元素O之后,元素L可以被处理


除了在集合上循环两次或反向,并对集合进行排序外,还有其他方法可以在单个循环中处理所有元素吗?

如果您知道哪些元素可能在访问元素时被解锁,下一步你可以访问它们——因为它们更有可能被解锁——你应该始终保持一个指向初始线性搜索到达的位置的指针——也许还有一个计数器,看看你是否已经浏览了所有元素——这样,如果你对另一个元素的访问没有结果,你就可以从这里继续。这不会降低大O,但可能会提高平均时间。这假设您可以在O(1)时间内完成搜索。
否则,我喜欢将锁定的元素移动到末尾,或者更好地移除未锁定的元素(因为这将最多添加n次移动元素),这样可以节省一些时间遍历数组/列表/搜索树

什么是“锁定”?如果项目被锁定,请将其移动到集合的末尾,因此,一旦所有未锁定的项目都被处理,您就可以再次检查它们。您必须检查何时中断循环,否则如果存在无法解锁的元素,它将永远运行。它需要一把“钥匙”才能解锁和处理它。这些“钥匙”是在处理一个元素后发出的。有没有逻辑可以使字母被其他字母解锁?如果试图处理锁定的元素,会发生什么情况?引发异常?请提供有关钥匙系统工作原理的更多信息:每个箱子是否需要一把钥匙才能解锁?你能重复使用同一把钥匙吗?箱子里可以装多少把钥匙?你从几把钥匙开始?