Java 在有序列表/数组/缓冲区中查找无序的值序列

Java 在有序列表/数组/缓冲区中查找无序的值序列,java,algorithm,Java,Algorithm,我正在尝试用Java创建一个游戏。我想创建一个功能,你可以牺牲物品,如果你牺牲了不同物品的正确“配方”,你会得到一些回报。配方的一个伪示例可能是: recipe1[1, 5, 32] recipe2[4, 221, 21, 9] 食谱的顺序应该无关紧要——意思是,如果我有 input=…,7,5,32,1对于recipe1[1,5,32],这应该返回true,但顺序应该很重要,因此input=…,5,7,32,1返回false,即使输入包含recipe1的所有值 我还没有真正的代码,因为我不知

我正在尝试用Java创建一个游戏。我想创建一个功能,你可以牺牲物品,如果你牺牲了不同物品的正确“配方”,你会得到一些回报。配方的一个伪示例可能是:

recipe1[1, 5, 32]
recipe2[4, 221, 21, 9]
食谱的顺序应该无关紧要——意思是,如果我有
input=…,7,5,32,1
对于
recipe1[1,5,32]
,这应该返回true,但顺序应该很重要,因此
input=…,5,7,32,1
返回false,即使输入包含recipe1的所有值


我还没有真正的代码,因为我不知道如何实现它。

如果使用一组集合,代码将更容易实现

Set<Set<Integer>> recipes = new HashSet<>();
Set recipes=new HashSet();
现在,您可以检查配方是否是集合的一部分:

boolean contains = recipes.contains(new HashSet<>(Arrays.asList(1,5,32));
boolean contains=recipes.contains(新的HashSet(Arrays.asList(1,5,32));
订单并不重要,但具体的项目很重要


啊,我想我误解了,这与你的要求正好相反。该死

按正确的顺序查找项目会执行更糟糕、更繁琐的操作。基本上,您可以对序列中的第一个项目进行排序。如果您找到了,请继续从那里查找。在这种情况下,您的数据结构将是一个列表



不,我认为这毕竟更接近我最初的理解。使用集合集,但测试您输入的所有可能子列表。

在这一点上,使用
containsAll
调用并传入您要比较的集合不是更好吗?这对排序约束有何帮助?@wadda_wadda nope,您ant希望在外部集合中找到单个项,而您希望在内部集合中找到完全匹配的项set@ThomasJungblut一个配方会放在一个集合中。正如我对OP的理解,他希望与配方项目相匹配,而不受顺序的影响。如果顺序很重要,请将内部从集合更改为列表,这样您就需要在内部列表中填充整个集合的排列put sequence?似乎不是一个非常有效的解决方案。两个问题:有多少个倒数,输入序列有多大?您需要优化什么:例如,快速查找静态输入序列的新倒数?@ThomasJungblut食谱的数量可能是无限的(但它们不会动态创建,因此始终会有一个静态的配方数),并且输入序列的大小可能应该是最长配方的大小。我正在考虑对输入序列使用类似CircularFifoQueue的东西。我希望它能够优化,以便在不可预测、动态、有序的输入序列中快速查找静态配方(希望我的术语就在这里,我是一个自学成才的新手程序员)