问题描述:
- 给定链表头结点
head
,该链表上的每个结点都有一个唯一的整型值,同时给定列表 nums
,该列表是上述链表中整型值的一个子集。
- 返回列表
nums
中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 nums
中)构成的集合。
核心思路:
- 这题的题目很拗口,其意思就是:
- 链表中节点如果存在于集合
nums
中,就认为是组件中的一员;而组件就是链表中的一段连续节点;也就是说,一段连续节点,其所有值均存在于集合中,就认为该段节点就是一个组件。
代码实现:
class Solution
{
public:
int numComponents(ListNode* head, vector<int>& nums)
{
unordered_set<int> ss(nums.begin(), nums.end());
int cnt = 0;
while(head)
{
if(ss.count(head->val) and (!head->next or !ss.count(head->next->val)))
++cnt;
head = head->next;
}
return cnt;
}
};