#Leetcode# 817. Linked List Components
Posted 丧心病狂工科女
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#Leetcode# 817. Linked List Components相关的知识,希望对你有一定的参考价值。
https://leetcode.com/problems/linked-list-components/
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 byhead
,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.
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: int numComponents(ListNode* head, vector<int>& G) { int ans = 0; unordered_set<int> s(G.begin(), G.end()); while(head) { if(s.count(head -> val) && (!head -> next || !s.count(head -> next -> val))) ans ++; head = head -> next; } return ans; } };
找在 G 中有多少个链表的子链表 把 G 里面的数字存到 unordered_set 中 (为了快速查找节点的数值是不是在数组中用 HashSet)
对于链表的数值 如果当前的在数组中且当前节点之后没有节点或者当前节点的下一个节点的值不存在在数组中那么出现一个新的子链表 所以 ans ++ 结果 return ans
FH 今天是温泉居
以上是关于#Leetcode# 817. Linked List Components的主要内容,如果未能解决你的问题,请参考以下文章
817. Linked List Components - LeetCode
LeetCode 817. Linked List Components (链表组件)