簡體   English   中英

面試:從兩個鏈接列表中查找類似的元素,並將結果作為鏈接列表返回

[英]Interview: Find similar elements from two linked lists and return the result as a linked list

我的朋友在接受采訪時詢問了這個問題。 面試官要求找到算法並用Java編寫代碼

問題:從兩個鏈接列表中查找類似的元素,並將結果作為鏈接列表返回

例如:如果linkedlist1有1-> 2-> 3-> 4-> 4-> 5-> 6且linkedlist2有1-> 3-> 6-> 4-> 2-> 8

結果鏈表1-> 2-> 3-> 4-> 6

謝謝

怎么樣:

return new LinkedList(new LinkedHashSet(list1).retainAll(list2));

這保留了list1的順序。 當然有人可能會抱怨這是作弊,如果提問者意味着你應該自己構建算法,但如果唯一的限制是“用Java編寫代碼”,那么這是一個有效的解決方案(很可能更有效和bug-免於任何人的手工制作的低級解決方案)。

創建哈希表。
瀏覽第一個鏈接列表,在訪問它們時標記條目。 O(N)瀏覽第二個鏈接列表,在訪問它們時標記條目(不同的標記等)。 O(M)

遍歷哈希表並查找具有LL成員的所有條目。 找到條目時創建新的LL成員。 哦)

總復雜度:O(N)+ O(M)+ O(最大(N,H,M))=> O(N)

注意:為Saurabh編輯答案。

獲取第一個鏈表並從第一個元素開始,將它與第二個鏈表的第一個元素進行比較,如果它們相同則將值添加到結果並轉到第一個列表的第二個元素,否則轉到第二個元素第二個列表,執行此操作直到值相同或到達第二個列表。

使用HashSet進行常量時間包含操作。

迭代第一個List並將它們添加到HashSet --- O(n)(注意添加到HashSet是一個常量時間)

迭代第二個列表,如果是hashSet.contains,則將它們添加到結果列表中。

在循環結束時返回結果列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM