set也有很多用,不要只看到了dict的作用
- 只出现一次的数字
class Solution:
def singleNumber(self, nums: List[int]) -> int:
'''
di = {}
for i in nums:
if i not in di.keys():
di[i] = 1
else:
di[i]+= 1
print(di)
return [k for k,v in di.items() if v==1][0]
'''
# 集合的方法
# set 可以用来判断元素的个数!!!
s = set()
for i in nums:
if i in s:
s.remove(i)
else:
s.add(i)
# print(s)
return list(s)[0]
2. 单链表判断环
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
'''set 可以用于解决重复问题 双指针可用于单链表是否有环的判断o(1)'''
# set 自己写的
# s = set()
# node = head
# while node:
# if node not in s:
# s.add(node)
# node = node.next
# continue
# return True
# return False
# 双指针 第一个指针 p1 每次移动两个节点,第二个指针 p2 每次移动一个节点,如果该链表存在环的话,第一个指针一定会再次碰到第二个指针,反之,则不存在环
p1 = head
p2 = head
# 遍历的条件值得注意一下 ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!p1比p2走得快,只判断p1即可
while p1 && p1.next:
p1 = p1.next.next
p2 = p2.next
if p1==p2:
return True
return False