自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 【BFS/题型二/迷宫】迷宫的最短路径

给定一个大小为NXM的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。给出起点和终点坐标,请求出从起点到终点所需的最小步数。请注意,本题假定从起点一定可以移动到终点。

2022-10-03 17:45:51 296

原创 【DFS题型七/连通块】岛屿数量

【代码】【BFS】岛屿数量。

2022-09-14 19:43:08 197

原创 [动态规划求方案数]

质数分解

2022-06-16 19:38:12 250 1

原创 [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关注的人

提示
确定要删除当前文章?
取消 删除