首页 > 其他分享 >力扣-链表组件

力扣-链表组件

时间:2023-09-24 11:58:46浏览次数:32  
标签:力扣 head ListNode int 结点 next 链表 组件

1.问题

给定链表头结点 head,该链表上的每个结点都有一个唯一的整型值 。

同时给定列表 G,该列表是上述链表中整型值的一个子集。

返回列表 G 中组件的个数,这里对组件的定义为:链表中一段极长连续结点的值(该值必须在列表 G 中)构成的集合。极长的含义是:这段连续结点的前面或后面结点不属于G。

示例 1:

输入: 

head: 0->1->2->3

G = [0, 1, 3]

输出: 2

解释: 

链表中,0 和 1 是相连接的,且 G 中不包含 2,所以 [0, 1] 是 G 的一个组件,同理 [3] 也是一个组件,故返回 2。

示例 2:

输入: 

head: 0->1->2->3->4

G = [0, 3, 1, 4]

输出: 2

解释: 

链表中,0 和 1 是相连接的,3 和 4 是相连接的,所以 [0, 1] 和 [3, 4] 是两个组件,故返回 2。

2.说明

如果 N 是给定链表 head 的长度,1 <= N <= 10000。

链表中每个结点的值所在范围为 [0, N - 1]。

1 <= G.length <= 10000

G 是链表中所有结点的值的一个子集.

输入说明:

首先输入链表长度len,然后输入len个整数,以空格分隔。

再输入G的大小m,然后输入m个整数,以空格分隔。

输出说明:

输出一个整数,表示结果。

3.范例

输入范例:

4
0 1 2 3
3
0 1 3

输出范例:

2

4.思路

遍历链表,对于head中的每个节点 a 判断其 a->val 是否在G中存在,如果存在那么G中对应的a->val 很可能是一个组件;此时还得检查一下 a->next(假设为 b = a->next), 如果 b->val 也在G中,那么 (a->b)形成了一个更大的子链表,以b结尾的链表很可能是一个组件;

算法思路:如果当前的节点在G 中,且下一个节点不在G 中,就找到了一个组件的尾节点,可以将答案加 1;
首先创建一个SET,把G中元素复制到SET中,然后从头开始遍历链表,如果当前结点在SET中且下一个结点不在SET中就res++,返回结果

5.代码

#include<iostream>
#include<math.h>
#include<vector>
#include<stdio.h>
#include<set>
using namespace std;

struct ListNode
{
    int val;
    ListNode *next;
    ListNode() : val(0), next(NULL) {}
    ListNode(int x) : val(x), next(NULL) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

class Solution {
public:

    int numComponents2(ListNode* head, vector<int>& G)
    {
        //首先创建一个SET,把G中元素复制到SET中,
        //然后从头开始遍历链表,如果当前结点在SET中且下一个结点不在SET中就res++,
        //返回结果
        set<int> s;
        for(int i=0;i<G.size();i++)
        {
            s.insert(G[i]);
        }
        ListNode *p=head;
        if(p==NULL)
            return 0;
        int res=0;
        while(p)
        {
            if(s.find(p->val)!=s.end())
            {
                if(p->next==NULL||s.find(p->next->val)==s.end())
                    res++;
            }
            p=p->next;
        }
        return res;
    }
};

ListNode *createByTail()
{
    ListNode *head;
    ListNode *p1,*p2;
    int n=0,num;
    int len;
    cin>>len;
    head=NULL;
    while(n<len && cin>>num)
    {
        p1=new ListNode(num);
        n=n+1;
        if(n==1)
            head=p1;
        else
            p2->next=p1;
        p2=p1;
    }
    return head;
}
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    vector<int> G;
    int m,data,res;
    ListNode* head = createByTail();
    cin>>m;
    for(int i=0; i<m; i++)
    {
        cin>>data;
        G.push_back(data);
    }
    res=Solution().numComponents2(head,G);
    cout<<res<<endl;
    return 0;
}

 

标签:力扣,head,ListNode,int,结点,next,链表,组件
From: https://www.cnblogs.com/ohye/p/17725776.html

相关文章

  • 父子组件如何互相调用接收值?
    父组件调用子组件子组件调用父组件<child:fatherFun="handleFatherFun"><child>子组件调用父组件的方法$emit()<div@click="childClick">点击调用父组件函数</div>childClick(){//子组件点击 this.$emit('fatherFun');//父组件的函数名}<child:father-fun=&q......
  • Hadoop是什么? Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并
    Hadoop是什么?Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并行处理任务,支持大规模数据存储和处理。Hadoop的核心组件包括分布式文件系统HDFS和分布式计算框架MapReduce,它们使得Hadoop可以在廉价的硬件上并行地处理大量数据。Hadoop还包括很多相关的项目和子......
  • 力扣练习题
    1#include<bits/stdc++.h>2#defineMAXSIZE1003usingnamespacestd;4typedefstruct{5char*base;6char*top;7intstactsize;8}sqstack;9voidinitstack(sqstack&s){10s.base=newchar[MAXSIZE];11if(!s.ba......
  • 算法打卡|Day3 链表part01
    Day3链表part01今日任务●链表理论基础●203.移除链表元素●707.设计链表●206.反转链表[TOC]链表理论基础文章链接:https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html重点:单链表是一种通过指针串联在一起的线性结构,每一......
  • Leetcode刷题21.合并两个有序链表
    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0] 提示:两个链表的节点数目......
  • 调用组件三部曲
    现有一个Footer的组件进行调用:<Footer></Footer>importFooterfrom'@/components/base/footer'components:{CereHeader,SiteNav,Footer}......
  • uniapp,微信小程序确认收货组件的使用
    直接上代码//拉起确认收货组件if(wx.openBusinessView){wx.openBusinessView({businessType:'weappOrderConfirm',extraData:{//merchant_id:'1230000109',//用户交易商户号//merchant_trade_no:"1234323JKHDFE1243252",//商户......
  • BootstrapBlazor组件库,NET8.0使用教程
    BootstrapBlazor组件库,NET8.0使用教程BootstrapBlazor组件库官网https://www.blazor.zone/componentsBootstrapBlazor组件库github仓库地址https://github.com/dotnetcore/BootstrapBlazorBootstrapBlazor组件库gitee仓库地址https://gitee.com/LongbowEnterprise/Bootstrap......
  • 01-React-组件-setState
    setState是如何给state赋值的通过Object.assign()importReactfrom'react';classHomeextendsReact.Component{constructor(props){super(props);this.state={name:'BNTang',age:18......
  • 01-React-组件-Ref
    React中获取元素的方式字符串对象回调函数官方文档:https://zh-hans.reactjs.org/docs/refs-and-the-dom.html#gatsby-focus-wrapper第一种传统方式(在React中及其不推荐)importReactfrom"react";classAppextendsReact.PureComponent{constructor(prop......