0
我在想最好的路线是从第一个堆栈中弹出一个元素,对其进行散列,然后查看第二个堆栈中弹出的元素是否在地图中。这是正确的轨道?如何在两个堆栈中找到第一个共同事件?
实施例:
stack1 = [1, 3, 4, 1, 2]
stack2 = [8, 7, 3, 0]
第一公共发生将是3.
编辑:我要去散列栈1,然后在stack2中比较每个元素到该散列。谢谢!
我在想最好的路线是从第一个堆栈中弹出一个元素,对其进行散列,然后查看第二个堆栈中弹出的元素是否在地图中。这是正确的轨道?如何在两个堆栈中找到第一个共同事件?
实施例:
stack1 = [1, 3, 4, 1, 2]
stack2 = [8, 7, 3, 0]
第一公共发生将是3.
编辑:我要去散列栈1,然后在stack2中比较每个元素到该散列。谢谢!
您可以使用的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
和循环,直到你找到它,或者没有什么再弹出。
非常好的技巧。 – Karan
您需要先将整个堆栈移至散列集。 – shmosel
仔细想想你的意思是“第一”。我不认为你已经明确了这个问题了。 –
找到两个堆栈之间的第一个匹配(最接近顶部)。 – jenkelblankel