如果你使用的是Chrome,可以试试Ctrl+F搜索你想要找的内容!
主要是各种算法、数据结构的用法。
数组
a = []
a.append() #在后面添加
b = a.pop() #删除最后一个,并把最后一个返回给b
链表
class Node(object):
def __init__(self, data):
self.data = data
self.next = None
栈
stack = []
stack.append() #栈添加
last = stack.pop() #栈删除,并把删除元素返回
队列
queue = []
queue.insert(0,data) #队列添加
data= queue.pop() #队列删除,并把删除元素返回
双端队列
from collections import deque
deq = deque()
deq.append() #右侧添加
deq.appendleft() #左侧添加
data = deq.pop() #右侧删除
data = deq.popleft() #左侧删除
#使用双端队列实现栈
stack = deque()
stack.append() #添加
data = stack.pop() #删除
#使用双端队列实现队列
queue = deque()
queue.append() #添加
data = queue.popleft() #删除
优先队列
from queue import PriorityQueue
pd = PriorityQueue()
pd.put(value, priority) #添加,1级别最高
data = pd.get() #取出最高级
哈希表和映射
dic = {
'a': 12, 'b': 23}
dic['c'] = 34 #添加
data = dic.get('a') #获得,如果不存在则返回None
dic.pop('a') #删除
集合
s = set() #创建一个无序不重复元素集,查询时间为O(1)
s.add(data) #添加
s.remove(data) #删除
二叉树
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
前缀和(和为k的子数组)
def subarraySum(self, nums: List[int], k: int) -> int:
count = 0 #计数
pre = 0 #前缀和
lookup = {
0:1} #哈希表{前缀和:出现次数}
for n in nums:
pre += n
if lookup.get(pre-k)!= None:
count += lookup[pre-k]
if lookup.get(pre)!= None:
lookup[pre] += 1
else:
lookup[pre] = 1
return count
递归
def recursion(level, param1, param2, ...):
#递归终止条件
if level > MAX_LEVEL:
result.append() #result添加和处理
return
#当前层的逻辑处理部分
...
#进入下一层
recursion(level+1, param1, param2, ...)
#返回当前层状态
return
分治
def divide_conquer(problem, param1, param2, ...):
#分治终止条件
if problem is None:
return value
#当前层的逻辑处理部分
data = prepare_data(problem)
subs = split_problem(problem, data)
#进入下一层计算子问题
sub1 = divide_conquer(subs[0], param1, param2, ...)
sub2 = divide_conquer(subs[1], param1, param2, ...)
sub3 = divide_conquer(subs[2],<