Java 如何在两个堆栈中找到第一个常见事件?

Java 如何在两个堆栈中找到第一个常见事件?,java,hash,stack,Java,Hash,Stack,我认为最好的方法是从第一个堆栈中弹出一个元素,对其进行散列,然后查看弹出时第二个堆栈中的相同元素是否在映射中。这是正确的轨道吗 例如: stack1 = [1, 3, 4, 1, 2] stack2 = [8, 7, 3, 0] 第一个常见的情况是3 编辑:我将对stack1进行散列,然后将stack2中的每个元素与该散列进行比较。谢谢 您可以使用一个表示所有数字的布尔值数组,每次从其中一个堆栈中弹出,检查相应的数字是否已经出现,如果已经出现,如果找到,如果没有设置为true: boole

我认为最好的方法是从第一个堆栈中弹出一个元素,对其进行散列,然后查看弹出时第二个堆栈中的相同元素是否在映射中。这是正确的轨道吗

例如:

stack1 = [1, 3, 4, 1, 2] 

stack2 = [8, 7, 3, 0]
第一个常见的情况是3


编辑:我将对stack1进行散列,然后将stack2中的每个元素与该散列进行比较。谢谢

您可以使用一个表示所有数字的
布尔值数组,每次从其中一个堆栈中弹出,检查相应的数字是否已经出现,如果已经出现,如果找到,如果没有设置为true:

boolean[] digits = new boolean[10];
int digit = stack1.pop();
if (digits[digit]) {
    // found the digit do something with it
} else {
    digits[digit] = true;
}

现在对
stack2
执行同样的操作并循环,直到找到它或不再有任何可弹出的内容。

您可以使用表示所有数字的
布尔值数组,每次从其中一个堆栈弹出,检查对应的数字是否已经出现,如果找到了,如果没有将其设置为true:

boolean[] digits = new boolean[10];
int digit = stack1.pop();
if (digits[digit]) {
    // found the digit do something with it
} else {
    digits[digit] = true;
}

现在对
stack2执行同样的操作,并循环,直到找到它或不再有任何可弹出的内容。

您需要首先将整个堆栈移动到哈希集。请仔细考虑“第一”的含义。我认为您对问题的定义还不够精确。在两个堆栈之间找到第一个匹配项(最接近顶部)。@shmosel这可能是最好的主意。然后从第二个列表中逐个弹出,看看它是否在集合中。谢谢因此,如果一个堆栈是bcd,另一个是cbad,哪个最靠近顶部?您需要首先将整个堆栈移动到哈希集。请仔细考虑“第一”的含义。我认为您对问题的定义还不够精确。在两个堆栈之间找到第一个匹配项(最接近顶部)。@shmosel这可能是最好的主意。然后从第二个列表中逐个弹出,看看它是否在集合中。谢谢那么,如果一个堆栈是bcd,另一个是cbad,哪个最靠近顶部?