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:
N
is the length of the linked list given by head
, 1 <= N <= 10000
. [0, N - 1]
.1 <= G.length <= 10000
.G
is a subset of all values in the linked list.
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 int numComponents(ListNode* head, vector<int>& G) { 12 unordered_set<int> set; 13 for(int num: G){ 14 set.insert(num); 15 } 16 17 int count = 0; 18 bool prev = false; 19 ListNode* curr = head; 20 while(curr){ 21 if(set.find(curr->val)!=set.end()){ 22 if(!prev){ 23 count++; 24 prev = true; 25 } 26 }else{ 27 prev = false; 28 } 29 30 curr= curr->next; 31 } 32 return count; 33 } 34 };
原文:https://www.cnblogs.com/ruisha/p/9483897.html