Leetcode-算法题模板总结

Tricks:
1、涉及求“多少种可能性”的题目一般都有递推性质
比如青蛙跳台阶
2、注意大数越界问题:随着n的增大,f(n)会超过int32甚至int64的取值范围,此时可以用“求余运算规则”。
3、注意python初始化一个空数组:dp = [0] * (n + 1) 这里是(n+1),不是n
4、空间复杂度优化:比如当dp列表的第i项只与第i-1和第i-2项有关,因此只需初始化三个整形变量 sum a b ,利用辅助变量sum使a b两数字交替前进即可。节省列表空间

ACM格式输入输出参考:
https://huaweicloud.csdn.net/63806984dacf622b8df87226.html

5、回溯法:实质是对隐式图的深度优先搜索算法
5.1模型:DFS BFS
5.2 python模板:判断+单层搜索;主函数:遍历起始点
详见:

6、链表 分为单链表 双链表和环形链表:
6.1、链表是以节点的方式存储,节点的逻辑顺序和物理顺序可以不一致
---------单链表插入节点(先后在前):X为新节点,先将其next指向为A2,再将A1上午next指向为X即可
在这里插入图片描述
删除节点:将A1的next指向为A3,这样便删除A2
-------双链表:pre data next
插入节点(正序):需要通过调整两次pre指向和两次next指向来完成。如下图,将A1的next指向X,将X的next指向A2,再将A2的pre指向X,将X的pre指向A1
在这里插入图片描述
删除双链表节点:需要通过调整一次pre指向和一次next指向来完成,如下图:将A1的next指向A3,再将A3的pre指向A1即可。

------例题之python模板:

class Node:
	def __init__(self,value):
	self.value=value
	self.prev=None
	self.next=None
def solve():#解题
	head=Node(value)#节点
	curr=head
	#创建一个从1-n排列的链表
	for i in range(2,n+1):
		node=Node(i)
		curr.next=node
		node.prev=curr
		curr=node
	#curr 规范地放在头尾
	curr.next=head
	head.prev=curr

------环形链表(循环链表)之单向环形
环形链表只需要保证链表的最后一个节点指向链表的第一个节点head 即可:third.next = head
在这里插入图片描述
例如:约瑟夫问题:https://blog.csdn.net/qq_44625774/article/details/105518197

7、滑动窗口模板
以右指针(end)作为驱动,拖着左指针(start)向前走。右指针每次只移动一步,而左指针在内部 while 循环中每次可能移动多步。

def solve(s):
	x,y=
	#首尾端
	start=0
	for end in range((len(s)):
	#更新需要维护的变量 有的变量需要if判断(如最大最小长度)
		x=new_x
		if condition:
			y=new_y
————————			
		#下面 分两种情况处理
		#情况一:窗口长度固定 如果达到 左指针前移一个单位
		if 达到限定长度:
			更新部分或所有维护变量
			窗口左指针前移一个单位
--------------
		#情况二:长度可变 涉及窗口是否合法
		while 不合法:
			更新部分或所有维护变量
			不断移动左指针直到窗口再次合法
	return	

8、一二指针模式
包括:对撞指针、快慢指针、分离双指针
比如:
求一个排序数组的平方(简单)
求总和为零的三元组(中等)
比较包含回退(backspace)的字符串(中等)
例题框架 盛最多水的容器

def solve(height):
	result=0
	left=0
	right=len(height)-1
	while left<right:
	#题目要求 规则
		l=right-left
		h=min(height[left], height[right])
		area=l*h
		result=max(result,area)
		#根据要求 移动两指针
		if height[left]<height[right]:
			left+=1
		else:
			right-=1
	return result
		

9、二叉树:遍历方式有BFS 和DFS(深度遍历又主要包含先序 中序后序遍历)
(1)二叉树算法设计总路线:把当前节点要做的事做好,其他的扔给递归,无需当前节点操心;

(2)如果当前节点会对下面的子节点有整体影响,可以通过辅助函数增长参数列表,借助参数传递信息;
BFS:主要解决最短路径问题,且二维数组一般会转化为一维数组处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值