Skip to content

Commit 19d5da1

Browse files
authored
Merge pull request #124 from Mrtj2016/master
add the solution of problem 0817-python.
2 parents 1b3a488 + 99d6b10 commit 19d5da1

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
## 链表组件
2+
### 题目描述
3+
4+
给定一个链表(链表结点包含一个整型值)的头结点 head。
5+
6+
同时给定列表 `G`,该列表是上述链表中整型值的一个子集。
7+
8+
返回列表 `G` 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 `G` 中)构成的集合。
9+
10+
**示例1:**
11+
```
12+
输入:
13+
head: 0->1->2->3
14+
G = [0, 1, 3]
15+
输出: 2
16+
解释:
17+
链表中,0 和 1 是相连接的,且 G 中不包含 2,所以 [0, 1] 是 G 的一个组件,同理 [3] 也是一个组件,故返回 2。
18+
```
19+
**示例2:**
20+
```
21+
输入:
22+
head: 0->1->2->3->4
23+
G = [0, 3, 1, 4]
24+
输出: 2
25+
解释:
26+
链表中,0 和 1 是相连接的,3 和 4 是相连接的,所以 [0, 1] 和 [3, 4] 是两个组件,故返回 2。
27+
```
28+
**注意:**
29+
- 如果 N 是给定链表 head 的长度,1 <= N <= 10000。
30+
- 链表中每个结点的值所在范围为 [0, N - 1]
31+
- 1 <= G.length <= 10000
32+
- G 是链表中所有结点的值的一个子集.
33+
34+
35+
### 解法
36+
链表被其中节点值不在列表`G`中的节点分成组件。依次遍历链表中的节点,若节点的值在`G`中,则产生一个组件,每当遇到节点值不在`G`中的节点,则当前组件结束。注意对链表结尾的处理。
37+
38+
```python
39+
class Solution:
40+
def numComponents(self, head, G):
41+
dic = set(G)
42+
ans = 0
43+
flag = 0
44+
while head:
45+
if head.val not in dic:
46+
if flag == 1:
47+
ans += 1
48+
flag = 0
49+
else:
50+
flag = 1
51+
head = head.next
52+
else:
53+
if flag == 1:
54+
ans += 1
55+
return ans
56+
```
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Definition for singly-linked list.
2+
# class ListNode:
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.next = None
6+
7+
8+
class Solution:
9+
def numComponents(self, head, G):
10+
"""
11+
:type head: ListNode
12+
:type G: List[int]
13+
:rtype: int
14+
"""
15+
dic = set(G)
16+
ans = 0
17+
flag = 0
18+
while head:
19+
if head.val not in dic:
20+
if flag == 1:
21+
ans += 1
22+
flag = 0
23+
else:
24+
flag = 1
25+
head = head.next
26+
else:
27+
if flag == 1:
28+
ans += 1
29+
return ans

0 commit comments

Comments
 (0)