817. Linked List Components**

817. Linked List Components**

https://leetcode.com/problems/linked-list-components/

Title Description

We are given head, the head node of a linked list containing unique integer values.

We are also given the list G, a subset of the values in the linked list.

Return the number of connected components in G, where two values are connected if they appear consecutively in the linked list.

Example 1:

Input: 
head: 0->1->2->3
G = [0, 1, 3]
Output: 2
Explanation: 
0 and 1 are connected, so [0, 1] and [3] are the two connected components.

Example 2:

Input: 
head: 0->1->2->3->4
G = [0, 3, 1, 4]
Output: 2
Explanation: 
0 and 1 are connected, 3 and 4 are connected, so [0, 1] and [3, 4] are the two connected components.

Note:

  • If N is the length of the linked list given by head, 1 <= N <= 10000.
  • The value of each node in the linked list will be in the range [0, N - 1].
  • 1 <= G.length <= 10000.
  • G is a subset of all values in the linked list.

C ++ implementation 1

This question is crucial to understand the meaning of problems, first of all in the value chain are unique, and Gvalues from the linked list of nodes, then request Gthe number of China Unicom have such components:

链表: 1->2->3->4->5->6->7->8
G  : [1, 2, 3, 5, 6, 8]

So Unicom have three components, namely:

1->2->3
5->6
8->

So we know the condition of components made Unicom, the last node recordcan not find a successor.

class Solution {
public:
    int numComponents(ListNode* head, vector<int>& G) {
        unordered_set<int> record(G.begin(), G.end());
        auto p = head;
        int res = 0;
        while (p) {
            if (record.count(p->val) && (!p->next || !record.count(p->next->val)))
                res ++;
            p = p->next;
        }
        return res;
    }
};
Published 455 original articles · won praise 8 · views 20000 +

Guess you like

Origin blog.csdn.net/Eric_1993/article/details/104914712