算法备忘录(python3)

这篇博客详述了算法的基础知识,包括数组、链表、栈、队列等基本数据结构,以及递归、分治、回溯等算法思想。还深入探讨了动态规划的应用,如股票买卖问题和编辑距离,并介绍了字典树、并查集和各种排序算法,是Python3算法学习的重要备忘录。
摘要由CSDN通过智能技术生成

如果你使用的是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
递归
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], param1, param2, ...)
	...
	#最终结果计算
	result = process_result(sub1, sub2, sub3, ...)
	return	result 
回溯
def backtracking(item = 0):
	#回溯终止条件
	if item == len(LIST):
		return True
	#当前层的逻辑处理部分
	index = prepare_index(item)
	#回溯
	for f in OUTSIDE_LIST(index):
		#改变result
		change_result(result)
		#进入下一层
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值