在力扣刷题时,除了最基础的列表(数组)、字符串操作,经常会用到 集合、栈、队列(双向队列)、哈希表、堆 这五种数据结构进行辅助解题,下面是这些数据结构的原理特性详解,以及python里面的用法。
各数据结构方法 时间复杂度 一栏:
https://blog.csdn.net/weixin_44414948/article/details/113934407
1、集合(set)
原理:就是数学课里面学的集合概念,有合集、并集、差集的那个,构成就不再赘述了。。。
特性:
1、无序性
2、确定性(编程时表现为不允许下标访问,以及修改元素)
3、不重复性(常用于列表去重)
python实现:
# 定义
s = set()
# 增,用法类似于list.append()
s.add()
# 删
s.pop(1) # 删除指定索引的元素,不传参则随机删除一个
s.remove(x) # 删除指定值的元素,必须传参
s.clear() # 清空set
s.discard() # 和remove类似,不传参不会报错
# 改
# 和字符串一样,不允许中途修改元素的操作,不支持下标索引的方式
s[0] # 这类的操作是不允许的
# 查
for s_i in s: # 使用for in 形式遍历,下标的遍历不允许
# 逻辑运算
s1 & s2 # 求两集合的交集
s1 | s2 # 求两集合的并集
s1 - s2 # 求两集合的差集
用法:列表去重
A = [1, 3, 2, 3, 2, 4, 5, 6]
A = set(A)
print(A) # 结果为去重后的A,即[1, 3, 2, 4, 5, 6],顺序随机
举例:
力扣刷题:448.找到所有数组中消失的数字(集合差法)
https://blog.csdn.net/weixin_44414948/article/details/113803271
2、栈(stack)
原理:
栈本质上就是一个容器,存放元素,和列表很像。
特性:
先入后出,后入先出(和队列相反)
python实现:
由于栈和列表很像,所以刷题时可以使用 list 当做 栈 使用,使用 pop() 方法实现出栈,append() 方法实现入栈,熟练这些刷题就够用了。
# 定义
stack =