LeetCode 817. 链表组件
作者:互联网
题意:
给定链表头结点 head,该链表上的每个结点都有一个 唯一的整型值 。
同时给定列表 G,该列表是上述链表中整型值的一个子集。
返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 G 中)构成的集合。
数据范围:
如果 N 是给定链表 head 的长度,1 <= N <= 10000。
链表中每个结点的值所在范围为 [0, N - 1]。
1 <= G.length <= 10000
G 是链表中所有结点的值的一个子集.
解法:
这题的题意有点模糊,
其实就是抽象成01序列,问里面的连续1序列有多少个.
先开map标记集合G中的数,用于之后快速判断元素是0还是1,
遍历链表统计连续1序列的数量即可.
code:
/**
* 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) {
unordered_map<int,int>mark;
for(auto i:G)mark[i]=1;
ListNode *p=head;
int cnt=0;
int ans=0;
while(p){
if(mark[p->val]){
cnt++;
}else {
if(cnt)ans++;
cnt=0;
}
p=p->next;
}
if(cnt)ans++;
return ans;
}
};
标签:cnt,ListNode,int,head,链表,ans,LeetCode,817 来源: https://blog.csdn.net/weixin_44178736/article/details/112814626