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