前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DAY29】LeetCode力扣算法题 [817. 链表组件 ]

【DAY29】LeetCode力扣算法题 [817. 链表组件 ]

作者头像
.29.
发布2022-11-15 13:56:41
1550
发布2022-11-15 13:56:41
举报
文章被收录于专栏:个人技术博客
在这里插入图片描述
在这里插入图片描述

刷题打卡,第 二十九 天


题目一、817. 链表组件

原题链接:817. 链表组件

题目描述

给定链表头结点 head,该链表上的每个结点都有一个 唯一的整型值 。同时给定列表 nums,该列表是上述链表中整型值的一个子集。 返回列表 nums 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 nums 中)构成的集合。 / 示例 1:

在这里插入图片描述
在这里插入图片描述

输入: head = [0,1,2,3], nums = [0,1,3] 输出: 2 解释: 链表中,0 和 1 是相连接的,且 nums 中不包含 2,所以 [0, 1] 是 nums 的一个组件,同理 [3] 也是一个组件,故返回 2。 / 示例 2:

在这里插入图片描述
在这里插入图片描述

输入: head = [0,1,2,3,4], nums = [0,3,1,4] 输出: 2 解释: 链表中,0 和 1 是相连接的,3 和 4 是相连接的,所以 [0, 1] 和 [3, 4] 是两个组件,故返回 2。 / 提示:

  • 链表中节点数为n
  • 1 <= n <= 104
  • 0 <= Node.val < n
  • Node.val 中所有值 不同
  • 1 <= nums.length <= n
  • 0 <= nums[i] < n
  • nums 中所有值 不同

解题思路: 题目要求我们在链表的节点子集nums中找到符合题目要求的组件,并返回组件数量。

根据题目知道组件就是链表中某一段最长连续结点的值(该值必须在列表 nums 中)构成的集合。

我们可以遍历链表节点,如果链表节点是子集nums中的组件开头,我们就记录下组件的数量。

判断当前节点是组件开头的两个依据:

①链表节点存在于子集nums中,且当前节点是链表头节点,组件数+1

②链表节点存在于子集nums中,且前一个节点不存在与自己中,组件数+1,为了确定前一个节点是否在子集中,我们需要使用一个布尔类型来记录。

遍历完之后返回记录下的组件数即可。

提交代码

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public int numComponents(ListNode head, int[] nums) {
        Set<Integer> set = new HashSet<>();  //创建不可重复集合Set
        int total = 0;                       //total记录组件数量
        for(int num : nums){                 //遍历子串数组
            set.add(num);                    //元素存入集合中
        }
        boolean flag = false;                //设置标记,判定头节点以及前一个结点是否不在子串中
        while(head != null){                 //遍历链表
            if(set.contains(head.val)){      //节点在子串中存在
                if(flag == false){           //为头节点或前一个结点不在子串中
                    flag = true;             //flag设置为true
                    ++total;                 //组件+1
                }
            }
            else{                            //不为组件开头元素
                flag = false;                //设置flag为false
            }
            head = head.next;                //继续i向后遍历数组
        }
        return total;                        //返回记录的组件数量
    }
}

提交结果

在这里插入图片描述
在这里插入图片描述

求关注⚽ 作者🥇 .29. 🥇 的✔博客主页✔来刷题⚽ 记录每日LeetCode✔刷题专栏✔

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 刷题打卡,第 二十九 天
  • 题目一、817. 链表组件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档