其他分享
首页 > 其他分享> > LeetCode 817. 链表组件

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