2017-10-16 65 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

相關問題