在做这个题之前,我们先介绍一下python里面的字典的基础知识:
Python字典可存储任意类型对象,如字符串、数字、元组等优点:取值方便,速度快
1,创建字典
字典由键(key)和对应值(value)成对组成。字典也被称作关联数组或哈希表。基本语法如下:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
注意:
每个键与值用冒号隔开(:),每对用逗号,每对用逗号分割,整体放在花括号中({})。
键必须独一无二,但值则不必。
值可以取任何数据类型,但必须是不可变的,如字符串,数组或元组。
2,访问字典中的值
print(d['key']) 如果写了不存在的值会报错
print(d.get('key')) 如果写了不存在的值,返回None
print(d.get('key','not find ')) 如果找不到存在的值,返回 “not find”
print(d.keys()) #获取所有的key 值
print(d.values()) #获取所有的value 值
if 'key' in d: #判断key是否存在
print('key')
for k,v in d.items(): #遍历字典
print(k,v)
#无须转换成list 格式,保留了字典原有的特性
for k in dict:
print(k,dict[k])
print(k,dict.get(k)) 取值速度快,性能好
3,修改字典
d['key'] = value key 存在即修改,key不存在即新增
d.setdefault('key',value) 只能新增
4,删除字典元素
d.pop('key') #必须要传值,因为字典是无序的
d.popitem() #随机删除一个
del d['key']
d.clear() #清空字典
leetcode题目:
编写一个程序,找到两个单链表相交的起始节点。
如下面的两个链表:
![f81cc35eee586af61cc3c55d9a1e482d.png](https://i-blog.csdnimg.cn/blog_migrate/2f561d410876491925fc35313b8d0140.png)
![13a2449e17c4285f4b0efcba30979ec9.png](https://i-blog.csdnimg.cn/blog_migrate/f1747daad45fcd853ae4e0028faf9c27.jpeg)
解题思路:
哈希表法(哈希表即python中的字典)
遍历链表 A 并将每个结点的地址/引用存储在哈希表中。然后检查链表 B 中的每一个结点 bi 是否在哈希表中。若在,则 bi为相交结点。
复杂度分析
时间复杂度 : O(m+n)
空间复杂度 : O(m) 或 O(n)
解题:
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
if headA is None or headB is None: #先判断链表A和链表B是否为空
return None
cur1, cur2 = headA, headB
hashmap = {} #创建哈希表
while cur1:
#print(cur1.val)
hashmap[cur1] = 1 #headA中的每个节点存储到哈希表中
cur1 = cur1.next
while cur2:
if hashmap.get(cur2) is not None: #判断当前cur2这个节点是否存在于hashmap中,是他即为相交节点
return cur2
cur2 = cur2.next