leetcode 817. 連結串列元件
阿新 • • 發佈:2021-07-21
給定連結串列頭結點head,該連結串列上的每個結點都有一個 唯一的整型值 。
同時給定列表G,該列表是上述連結串列中整型值的一個子集。
返回列表G中元件的個數,這裡對元件的定義為:連結串列中一段最長連續結點的值(該值必須在列表G中)構成的集合。
示例1:
輸入:
head: 0->1->2->3
G = [0, 1, 3]
輸出: 2
解釋:
連結串列中,0 和 1 是相連線的,且 G 中不包含 2,所以 [0, 1] 是 G 的一個元件,同理 [3] 也是一個元件,故返回 2。
示例 2:
輸入:
head: 0->1->2->3->4
G = [0, 3, 1, 4]
輸出: 2
解釋:
連結串列中,0 和 1 是相連線的,3 和 4 是相連線的,所以 [0, 1] 和 [3, 4] 是兩個元件,故返回 2。
提示:
如果N是給定連結串列head的長度,1 <= N <= 10000。
連結串列中每個結點的值所在範圍為[0, N - 1]。
1 <= G.length <= 10000
G 是連結串列中所有結點的值的一個子集.
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/linked-list-components
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
1:採用map來記錄陣列中有哪些數字。
2:遍歷連結串列,若連結串列中的數字在map中出現,則說明存在,是一個元件中的元素.
3:直到連結串列中的數字在map中沒有的時候,表示一個元件結束。計數器 + 1.
4:按照上述邏輯,遍歷連結串列到結束。
public int numComponents(ListNode head, int[] nums) { HashMap<Integer, Integer> map = new HashMap<>(nums.length << 1); for (int item : nums) { map.put(item, 1); } int res = 0; while (head != null) {if (map.get(head.val) != null) { while (head != null && map.get(head.val) != null) { head = head.next; } res++; } else { head = head.next; } } return res; }