dict和set
1. 結構上的區別:
類型 | 鍵(Key) | 值(Value) | 示例 |
---|---|---|---|
dict | 有 | 有 | {'a': 1, 'b': 2} |
set | 有 | 沒有 | {'a', 'b'} |
-
dict
是**鍵值對(key-value)**的集合。 -
set
是只有鍵(key)沒有值的一組唯一元素。
2. 用途上的區別:
-
dict
用于建立鍵與值的映射,例如地址到位置、用戶名到ID等。 -
set
用于快速查找是否存在、去重、集合運算等,例如判斷某個元素是否出現過。
3. 操作上的區別:
dict
常見操作:
d = {'x': 1, 'y': 2}
d['z'] = 3 # 添加鍵值對
value = d.get('x') # 查找鍵對應的值
del d['y'] # 刪除鍵值對
set
常見操作:
s = {'a', 'b'}
s.add('c') # 添加元素
s.remove('a') # 刪除元素
exists = 'b' in s # 判斷是否存在
4. 底層實現的共同點和不同點:
-
相同點:都使用哈希表,所以查找、插入、刪除的時間復雜度平均為 O(1)O(1)。
-
不同點:
-
dict
哈希表存儲的是 (key, value) 對,插入更復雜。 -
set
只存 key,沒有 value,占用空間略小,操作略快。
-
---```python
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = None
class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:seen=set()while head:if head in seen:return Trueseen.add(head)head=head.nextreturn False
思路:
利用集合 seen
記錄遍歷過程中出現過的節點引用(即內存地址)。若遍歷某個節點時發現它已經在 seen
中,說明這個節點之前已經訪問過,即鏈表存在環。否則,將當前節點加入集合并繼續向后遍歷。
🧠解題過程:
-
創建一個空集合
seen
; -
從頭節點
head
開始,逐個遍歷每個節點; -
如果當前節點
head
已存在于seen
中,說明鏈表出現了環,返回True
; -
否則將當前節點加入集合,繼續向下一個節點遍歷;
-
若遍歷到
None
,說明鏈表無環,返回False
。