求煉表中一段最長連續結點的值(值必須出現在列表g中,不要求順序)構成的集合的個數;
一開始還以為是要求順序的,想說用遞迴來做,發現鍊錶的值只是出現在列表中而已,因此判斷鍊錶中的值出現在列表中的次數(連續不算)即可,有點類似移動視窗的思路;
下面的實現是優化了幾次,第一次是使用了dict,第二次是不需要統計哪些值不存在(大部分的時間消耗在in函式中,其實這部分沒有必要進行判斷,只需要判斷出現的即可),第三版是最終的優化版本;
classsolution(object):
defnumcomponents(self, head, g):
"""執行用時 : 184 ms, 在linked list components的python提交中擊敗了31.75% 的使用者
記憶體消耗 : 18.8 mb, 在linked list components的python提交中擊敗了100.00% 的使用者
:type head: listnode
:type g: list[int]
:rtype: int
"""ans = 0
ifnot
head:
return
ansg = set(g)
g_dict =
while
head:
# 如果不在列表中則一直移動,直到找到出現在g中的結點
while
head
andnot
g_dict.get(head.val, 0):
head = head.next
ifhead
isnone:
return
ans# 如果存在的話,則一直移動,直到找到沒有出現在g中的結點
ifg_dict.get(head.val, 0):
ans += 1
while
head
andg_dict.get(head.val, 0):
head = head.next
return
ans
defnumcomponents2(self, head, g):
"""執行用時 : 104 ms, 在linked list components的python提交中擊敗了55.56% 的使用者
記憶體消耗 : 18.7 mb, 在linked list components的python提交中擊敗了100.00% 的使用者
:type head: listnode
:type g: list[int]
:rtype: int
"""ans = 0
ifnot
head:
return
ansg = set(g)
g_dict =
while
head:
# 如果在列表中則一直移動,直到找到沒有出現在g中的結點
is_exist = false
while
head
andg_dict.get(head.val, 0):
is_exist = true
head = head.next
ifis_exist:
ans += 1
else:
head = head.next
return
ans
defnumcomponents3(self, head, g):
"""執行用時 : 96 ms, 在linked list components的python提交中擊敗了98.41% 的使用者
記憶體消耗 : 18.8 mb, 在linked list components的python提交中擊敗了100.00% 的使用者
:type head: listnode
:type g: list[int]
:rtype: int
"""ans = 0
ifnot
head:
return
ansg = set(g)
while
head:
# 如果在列表中則一直移動,直到找到沒有出現在g中的結點
is_exist = false
while
head
andhead.val
ing:
is_exist = true
head = head.next
ifis_exist:
ans += 1
else:
head = head.next
return
ans
817 鍊錶元件
給定乙個鍊錶 鍊錶結點包含乙個整型值 的頭結點 head。同時給定列表 g,該列表是上述鍊錶中整型值的乙個子集。返回列表 g 中元件的個數,這裡對元件的定義為 鍊錶中一段最長連續結點的值 該值必須在列表 g 中 構成的集合。示例 1 輸入 head 0 1 2 3 g 0,1,3 輸出 2 解釋 鍊...
817 鍊錶元件
817.鍊錶元件 看懂題目是關鍵,因為缺失的結點值會將原鍊錶斷開,實際上就是讓我們求有多少個相連的子鍊錶。方法1 遍歷鍊錶,每個節點在g中找到則為1,否則為0,存入棧中stack 1,1,0,1,1 然後再對棧進行判斷 我們對鍊錶進行一次掃瞄,乙個元件在鍊錶中對應一段極長的連續節點,因此如果當前的節...
鍊錶 817 鍊錶元件
817.鍊錶元件 給定煉表頭結點 head,該鍊錶上的每個結點都有乙個 唯一的整型值 同時給定列表 g,該列表是上述鍊錶中整型值的乙個子集。返回列表 g 中元件的個數,這裡對元件的定義為 鍊錶中一段最長連續結點的值 該值必須在列表 g 中 構成的集合。示例 1 輸入 head 0 1 2 3 g 0...