- 博客(66)
- 收藏
- 关注
原创 【BFS/题型二/迷宫】迷宫的最短路径
给定一个大小为NXM的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。给出起点和终点坐标,请求出从起点到终点所需的最小步数。请注意,本题假定从起点一定可以移动到终点。
2022-10-03 17:45:51
296
原创 [LCIS]LIS+LCS
题目解析这题是动态规划问题经典问题 在动态规划中,最长公共子序列(LCS)与最长上升子序列(LIS)是基础的线性 DP,本题要求求出两个不等长序列的最长公共上升子序列。本体解法就是在最长公共子序列上找一遍最长上升子序列即可。求解最长公共子序列,也就是在判断 a[i] = = b[j] 的前提下,再求出上升序列 dp[i][j] 代表所有 a[1 ~ i] 和 b[1 ~ j] 中以 b[j] 结尾的公共上升子序列的集合; dp[i][j] 的值等于该集合的子序列中长度的最大值;状态方程: 对于当处于(a[i
2022-06-16 10:42:02
176
原创 [LCS匹配型动态规划]
通配符匹配LintCode 炼码最长公共子序列LintCode 炼码如果第i个字符和第j个字符不相等,则看看去掉第i个的lcs大还是去掉第j个的lcs大,即如果相等保险点就都写上 因为存在公共部分,综上编辑距离LintCode 炼码如果第i个字符和第j个字符相等,我们可以有三种改法,我们不知道哪种该法要好,就直接让他们自己去比较进行了,第一种是将是将s1的第i个字符删去操作加1,dp[i-1][j]+1第二种是将是将s1后加个相同的字符然后去和s2的j-1比较,dp[i][j-
2022-06-15 17:08:38
329
原创 [天梯赛]L1-023 输出GPLT
总结:对于某一字符串的特定排序,可以先进行元素收集,然后进行重组本次算法用到了字典的values函数,本质是返回字典包含所有value(可以是字符串)的列表PTA | 程序设计类实验辅助教学平台
2022-06-10 12:21:32
185
原创 [LIS接龙型动态规划]
dp【i】:表示以第i个数为龙尾的最长的龙有多长dp【i】=max{dp【j】+1},j<i&&nums【j】<nums【i】initialization:dp【0..n-1】=1 answer:max{dp【0..n-1】
2022-05-21 20:15:35
303
原创 【区间型动态规划】
dp[i][j]:i,j分别表示字符串的首尾索引我们知道,大区间的结果总是依赖于小区间,由此#初始化dp[n-1][n-1]=Truefor i in range(n-1): dp[i][i]=True #一个字符肯定是回文 dp[i][i+1]=s[i]==s[i+1] #两个字符是否是回文for i in range(n): for j in range(i+2,n): dp[i][j]=dp[i+1][j-1] a...
2022-05-15 21:59:30
424
原创 【动态规划】背包问题的几种变形
1,最小划分LintCode 炼码给出一个正整数数组,写一个程序把这个整数数组分成S1跟S2两部分,使S1中的和跟S2中的和的差的绝对值最小。换句话讲,如果有一个一个整数数组 S 有 n 个数,如果Subset1有 m 个数,Subset2必须有 n-m 个数并且 abs(sum(Subset1) – sum(Subset2)) 应该最小。 #x,sum-x #sum-x-x最小 #x最接近sum/2 #转换成01背包sum/2就.
2022-05-15 19:23:46
731
原创 【动态规划】背包问题
注意:for j in range(1,m+1):是枚举所有的情况,不用一一判断放入物品后背包容量减少后j的变化。为什么从1开始,因为0已经写出来了,即dp[i-1][j]=dp[i-1][j-0*a[i-1]]+0*v[i-1]。01背包无价值n=len(a)dp=[[False]*(m+1) for i in range(n+1)]dp[0][0]=Truefor i in range(1,n+1): dp[i][0]=True for j in range(1,m+1)
2022-05-15 12:24:08
1145
原创 【动态规划】
使用场景:有方向(无环,无相反方向)求最值,求可行性,只求方案总数题型分类:坐标型,前缀型(划分型:一个字符串划分,匹配性:两个字符串匹配),背包型,区间型,博弈型,树型,状态压缩型(TSP问题)。坐标型,可行性+最值grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0]]n=len(grid)m=len(grid[0])dp=[[float('inf')]*m for _ in range(n)]dp[0][0]=0for j in range
2022-05-12 16:57:14
227
原创 【动态规划】自顶向下,自低向上
dp[i][j]:从(0,0)走到(i,j)dp[i][j]:从i走到j,当步长不为一时数字三角形:自底向上:l=[]n=len(l)dp=[[0*(i+1)] for i in range(n)]for j in range(n-1): dp[n-1][j]=l[n-1][i]for i in range(n-1,-1,-1): for j in range(i+1): dp[i][j]=min(dp[i-1][j],dp[i-1][j-1.
2022-05-11 13:40:17
462
原创 【无标题】
a = "2013-10-10 23:40:00"想改为 a = "2013/10/10 23:40:00"a = "2013-10-10 23:40:00"timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)#a="2013/10/10 23:40:00"a=datetime.time(12,11,30)print
2022-05-10 18:00:00
139
原创 【分治法】最小子树
from lintcode import ( TreeNode,)"""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None"""class Solution: """ @param root: the root of binary tree ...
2022-05-09 14:21:10
278
原创 【二叉树中序遍历】
class BSTIterator: def __init__(self, root): self.stack = [] self.find_most_left(root) def find_most_left(self,node): while node != None: self.stack.append(node) node = node.left ...
2022-05-08 17:11:52
233
原创 【关于递归解决二叉树的思维问题】
#每个递归都是在处理一个小的二叉树,即根节点,左,右节点#定义:判断root为根的二叉树是否是平衡树并且返回高度是多少def divideConquer(root): #出口:如果是空树,直接返回是平衡的,高度为0 if not root: return True,0 #拆解:拆解到左右子树,得到左右子树是否平衡和高度的信息 #我们把divideConquer(root.left)的返回值当成这个小二叉树左节点的高度 is_left_bala...
2022-05-08 15:00:53
142
原创 【二叉树的所有路径】
LintCode 炼码class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = rightdef Tree(node=[]):#创建二叉树 if node is None or len(node)==0:#node初始为[]或者为None return No
2022-05-08 14:21:02
215
原创 递归,回溯,深搜
def f(n): f(n-1)递归在回溯过程中会将n复原,即从栈中pop出,每次调用内函数,就会将参数压入栈中,def f(node,list): list.append(node.val) f(node.left,list) list.pop(O) f(node.left,list) list.pop(O) list列表在回溯时不会改变其内部内容def f(node,list): f(node.lef...
2022-05-08 13:19:59
197
原创 二叉树的建立
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = rightdef Tree(node=[]):#创建二叉树 if node is None or len(node)==0:#列表node初始为[]或者为None return None da...
2022-05-08 11:32:26
430
原创 [DFS和的全排列]
def dfs(step): global total if step==10: if a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9]: total+=1 print("%d%d%d+%d%d%d=%d%d%d"%(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9])) return...
2022-05-06 18:22:03
252
原创 [DFS全排列]深入理解dfs的内外层
#找出begin到n中和为m的所有组合,存入path并且打印。从前到后的深搜顺序保证了输出是符合字典顺序的。def dfs(begin,sum,path): if sum==0: for i in range(len(path)): if i==len(path)-1: print(path[i],end='=') print(m) else: ...
2022-05-06 14:53:50
783
原创 【BFS题型五/拓扑排序】605 · 序列重构
class Solution: """ @param org: a permutation of the integers from 1 to n @param seqs: a list of sequences @return: true if it can be reconstructed only one or false """ def sequenceReconstruction(self, org, seqs): # cons...
2022-05-03 17:12:59
308
原创 【BFS题型五/拓扑排序】615 · 课程表
615 · 课程表from typing import ( List,)class Solution: """ @param num_courses: a total of n courses @param prerequisites: a list of prerequisite pairs @return: true if can finish all courses or false """ def can_finish(self,
2022-05-03 15:05:30
331
原创 【BFS题型二/迷宫/特殊方向】611 · 骑士的最短路线
611 · 骑士的最短路线from typing import ( List,)from lintcode import ( Point,)"""Definition for a point:class Point: def __init__(self, x=0, y=0): self.x = x self.y = y"""class Solution: """ @param grid: a chessboa
2022-05-02 23:00:50
196
原创 【BFS题型一/涂色/部分广搜】695. 岛屿的最大面积
力扣695. 岛屿的最大面积力扣class Solution: def maxAreaOfIsland(self, grid: List[List[int]]) -> int: from collections import deque def dfs(x, y, n, m): grid[x][y]=0 queue=deque([(x,y)]) num=1 wh
2022-05-02 16:02:41
184
原创 【DFS题型七/连通块】P1451 求细胞数量
题目描述一矩形阵列由数字00到99组成,数字11到99代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。输入格式第一行两个整数代表矩阵大小nn和mm。接下来nn行,每行一个长度为mm的只含字符0到9的字符串,代表这个n \times mn×m的矩阵。输出格式一行一个整数代表细胞个数。输入输出样例输入 #1复制4 100234500067103456050020456006710...
2022-05-01 20:03:15
242
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1