difficulty:中等
給定煉表頭結點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。
solution
這道題需要解決的問題在於如何保留「最長連續結點」的狀態,想來想去用來一種比較笨的辦法,利用字串split的方法可以區分連續和不滿足條件兩種狀態,唯一的缺點是消耗的記憶體比較大。
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class solution:
def numcomponents(self, head: listnode, g: list[int]) -> int:
s = ''
if not head: return len(res)
gs = set(g) # 先轉成set後判斷的效率會更高
while head:
s += '_' if head.val in gs else ','
head = head.next
l = s.split(',')
return len([i for i in l if i])
Leetcode 817 鍊錶元件
time 20190903 type medium 給定乙個鍊錶 鍊錶結點包含乙個整型值 的頭結點 head。同時給定列表 g,該列表是上述鍊錶中整型值的乙個子集。返回列表 g 中元件的個數,這裡對元件的定義為 鍊錶中一段最長連續結點的值 該值必須在列表 g 中 構成的集合。示例 1 輸入 head...
leetcode 817 鍊錶元件
給定煉表頭結點 head,該鍊錶上的每個結點都有乙個 唯一的整型值 同時給定列表 g,該列表是上述鍊錶中整型值的乙個子集。返回列表 g 中元件的個數,這裡對元件的定義為 鍊錶中一段最長連續結點的值 該值必須在列表 g 中 構成的集合。示例 1 輸入 head 0 1 2 3 g 0,1,3 輸出 2...
LeetCode 817 鍊錶元件 計數
解法一 常規解法,建圖 dfs,時間複雜度o n o n 空間複雜度因為需要儲存圖,所以是o n 這種方法是通解,對於所有圖都適用。definition for singly linked list.struct listnode class solution u v dfs int ans 0 u...