2017-10-16 25 views
0

我在想最好的路线是从第一个堆栈中弹出一个元素,对其进行散列,然后查看第二个堆栈中弹出的元素是否在地图中。这是正确的轨道?如何在两个堆栈中找到第一个共同事件?

实施例:

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

stack2 = [8, 7, 3, 0] 

第一公共发生将是3.

编辑:我要去散列栈1,然后在stack2中比较每个元素到该散列。谢谢!

+0

您需要先将整个堆栈移至散列集。 – shmosel

+0

仔细想想你的意思是“第一”。我不认为你已经明确了这个问题了。 –

+0

找到两个堆栈之间的第一个匹配(最接近顶部)。 – jenkelblankel

回答

2

您可以使用的boolean数组,将代表所有的数字,从栈之一每次弹出,检查相应的数字已经发生,如果没有你找到它,如果不将其设置为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和循环,直到你找到它,或者没有什么再弹出。

+0

非常好的技巧。 – Karan

相关问题