Time: 20190903
Type: Medium

题目描述

给定一个链表(链表结点包含一个整型值)的头结点 head。

同时给定列表 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。
注意:

如果 N 是给定链表 head 的长度,1 <= N <= 10000。
链表中每个结点的值所在范围为 [0, N - 1]。
1 <= G.length <= 10000
G 是链表中所有结点的值的一个子集.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/linked-list-components
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

遍历链表时去查询数字是否出现在G中,如果连续出现,则指针也后移,计数不加。

问题是,如果直接问元素是否在G中,结果会超时,换用集合来比较就可以了。

集合增删查改的平均复杂度是O(1),底层实现方式是带有空值的字典。

代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def numComponents(self, head: ListNode, G: List[int]) -> int:if not head:return 0_set = set()for num in G:_set.add(num)count = 0while head:val = head.valif val in _set:count += 1while val in _set and head.next:head = head.nextval = head.valhead = head.nextreturn count

set的in比list的in要快很多。

END.

Leetcode 817.链表组件相关推荐

  1. LeetCode 817. 链表组件

    1. 题目 给定一个链表(链表结点包含一个整型值)的头结点 head. 同时给定列表 G,该列表是上述链表中整型值的一个子集. 返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的 ...

  2. if 组件是否存在_LeetCode 817. 链表组件 题解

    817. 链表组件 题解 题目描述 解法:哈希表 思路 本题的关键在于给定某个特定的值,如何能够快速地确定该值是否存在于列表G中.容易想到可以采用哈希表的方式存储列表G中的各个元素以方便查找.而由于这 ...

  3. 【精】LintCode领扣算法问题答案:1371. 链表组件

    1371. 链表组件 描述 给定一个链表(链表结点包含一个整型值)的头结点 head. 同时给定列表 G,该列表是上述链表中整型值的一个子集. 返回列表 G 中组件的个数,这里对组件的定义为:链表中一 ...

  4. leetcode算法题--链表组件

    原题链接:https://leetcode-cn.com/problems/linked-list-components/ 线性扫描 int numComponents(ListNode* head, ...

  5. Leetcode中单链表题总结

    以下是个人对所做过的LeetCode题中有关链表类型题的总结,博主小白啊,若有错误的地方,请留言指出,谢谢. 一.有关反转链表 反转链表是在单链表题中占很大的比例,有时候,会以各种形式出现在题中,是比 ...

  6. LeetCode 2130. 链表最大孪生和(链表快慢指针+反转链表+双指针)

    文章目录 1. 题目 2. 解题 1. 题目 在一个大小为 n 且 n 为 偶数 的链表中,对于 0 <= i <= (n / 2) - 1 的 i ,第 i 个节点(下标从 0 开始)的 ...

  7. LeetCode 1019. 链表中的下一个更大节点(单调栈)

    1. 题目 给出一个以头节点 head 作为第一个节点的链表.链表中的节点分别编号为:node_1, node_2, node_3, - . 每个节点都可能有下一个更大值(next larger va ...

  8. LeetCode 382. 链表随机节点(概率)

    1. 题目 给定一个单链表,随机选择链表的一个节点,并返回相应的节点值.保证每个节点被选的概率一样. 进阶: 如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现? 来源:力扣( ...

  9. 【LeetCode 单链表专项】反转链表II(92)

    文章目录 1. 题目 1.1 示例 1.2 说明 1.3 限制 1.4 进阶 2. 解法一(穿针引线) 2.1 分析 2.2 解答 2.3 复杂度 3. 解法二(头插法) 3.1 分析 3.2 解答 ...

最新文章

  1. 【Python】turtle库的小应用
  2. 从Spring-Session源码看Session机制的实现细节
  3. 一个完整的 Web 请求到底发生了什么
  4. go基本数据类型与运算符
  5. [CQOI2011]放棋子 题解(dp+组合数学)
  6. python可以在windows运行吗_在Windows中,如何运行这个python脚本呢?
  7. Private Bytes,Working Set,Virtual Size的区别
  8. 洛谷P1141 01迷宫【bfs】
  9. 人体如何区分阴虚和阳虚?
  10. 新手配置Intel NUC8i5INH的Ubuntu 16.04 时无法上网
  11. 欲练神功必先自宫,String 自宫后“不可变性”到底有啥好处?
  12. 计算机毕业设计(附源码)python智慧医疗系统
  13. REVIT建模“族类别和族参数”中的“总是垂直”“基于工作平面”怎么用?
  14. 使用VBA如何将中文字符转换为区位码
  15. 继戴姆勒之后 德国公司Bury就汽车通信相关专利授权投诉诺基亚
  16. 新的放假规定,大年三十还得朝九晚五!
  17. OSChina 周六乱弹 ——手机进化史?程序员用啥手机?
  18. 【干货】零基础如何学习网站建设
  19. 智能家居视觉信息安全
  20. CALIPSO数据产品总结

热门文章

  1. filemode对git diff的影响
  2. 数字化方法基础(三)_导入本地模型
  3. oracle连接实例怎么连接,连接ORACLE实例
  4. xml格式的word转为标准格式_保持的怎么保证Word格式不变?4个技巧需要带走
  5. 死锁示例代码_Java示例中的死锁
  6. Android Studio和Kotlin入门
  7. knn约会_出色的在线约会预订系统应具备的5个功能
  8. 如何在Shell脚本中使用if-else?
  9. ROS的学习(十九)用rosserial创建一个subscriber
  10. 弱人工智能才是未来AI研究的主流方向