1. 程式人生 > 其它 >leetcode 817. 連結串列元件

leetcode 817. 連結串列元件

給定連結串列頭結點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; }