自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Day34-动态规划2-代码随想录:基础题、不同路径、整数拆分、不同二叉搜索树

确定dp数组(dp table)以及下标的含义dp[i] : 1到i为节点组成的二叉搜索树的个数为dp[i]。也可以理解是i个不同元素节点组成的二叉搜索树的个数为dp[i] ,都是一样的。以下分析如果想不清楚,就来回想一下dp[i]的定义确定递推公式递推关系, dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]j相当于是头结点的元素,从1遍历到i为止。所以递推公式:,j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量。

2025-09-22 20:13:09 1040

原创 Day32-动态规划1-代码随想录:基础题、斐波那契、爬楼梯

动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

2025-09-21 23:00:22 619

原创 ACM输入输出模版-代码随想录整理

输入格式描述示例代码一行一个整数一行多个整数多行,每行一个整数多行,每行多个整数不确定行数,直到 EOF快速读取所有数据+ 指针处理练习题:25. 最爱的城市try:# 接收一行作为输入,将之分隔成n, m# 接收m行作为输入# 接收一行作为输入,将之分隔成x, yelse:breakmain()

2025-09-19 21:09:42 699

原创 Day23-回溯2-代码随想录:组合总和、分割问题

在处理组合问题的时候,递归参数需要传入。

2025-09-19 10:26:10 979

原创 Day22-回溯-代码随想录:理论、组合

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。

2025-09-18 15:28:54 1027

原创 Day21-二叉树8-代码随想录:修剪/构造二叉搜索树、累加树、总结

涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。注意在普通二叉树的属性中,我用的是一般为后序,例如单纯求深度就用前序,二叉树:找所有路径 (opens new window)也用了前序,这是为了方便让父节点指向子节点。所以求普通二叉树的属性还是要具体问题具体分析。

2025-09-17 17:29:54 564

原创 Day20-二叉树7-代码随想录:二叉搜索树(最近公共祖先、插入、删除)、递归(搜索边)

对于二叉搜索树的最近祖先问题,其实要比普通二叉树公共祖先问题 (opens new window)(回溯、自底向上、后续遍历)简单的多。不用使用回溯,二叉搜索树自带方向性,可以方便的从上向下查找目标区间,遇到目标区间内的节点,直接返回。最后给出了对应的迭代法,二叉搜索树的迭代法甚至比递归更容易理解,也是因为其有序性(自带方向性),按照目标区间找就行了。701. 二叉搜索树中的插入操作。

2025-09-17 14:58:24 827

原创 Day18-二叉树6-代码随想录:双指针、二叉搜索树、递归返回值(搜索树/边)、最近公共祖先(自底向上、回溯)

求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果。

2025-09-08 23:33:30 557

原创 Day17-二叉树5-代码随想录:搜索树、中序遍历

对于树中的任意节点,其左子树的所有节点值均小于该节点的值。其右子树的所有节点值均大于该节点的值。左子树和右子树也必须是二叉搜索树。中序遍历递增性质二叉搜索树也可以为空!插入若小于当前节点值,进入左子树递归插入。若大于当前节点值,进入右子树递归插入。若等于当前节点值,通常根据需求处理(如忽略或更新)。查找若目标值等于当前节点值,返回节点。若目标值小于当前节点值,在左子树中递归查找。若目标值大于当前节点值,在右子树中递归查找。若到达空节点,表示未找到。删除。

2025-09-08 21:23:48 558

原创 Day16-二叉树4-代码随想录:path[:]与引用、路径和、中后序构造二叉树

作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为。

2025-09-08 16:55:32 1029

原创 Day15-二叉树3-代码随想录:递归、回溯、深度、路径、隐形回溯

的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。关于根节点的深度究竟是1 还是 0,不同的地方有不一样的标准,leetcode的题目中都是以节点为一度,即根节点深度是1。当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int。,属于位操作符的一种。

2025-09-08 00:21:11 824

原创 Day14-二叉树2-代码随想录:翻转、对称、深度、高度

深度:指从根节点到该节点的路径上的边数。根节点的深度为0,其子节点的深度为1,以此类推。高度:指从该节点到最远叶子节点的路径上的边数。叶子节点的高度为0,非叶子节点的高度为其子节点高度的最大值加1。

2025-09-05 15:00:38 678

原创 Day13-二叉树1-代码随想录:*递归遍历,迭代遍历

代码随想录https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html二叉树可以链式存储,也可以顺序存储。链式存储方式就用指针, 顺序存储的方式就是用数组。顺序存储的元素在内存是连续分布的,而链式存储则是通过指针把分布在各个地址的节点串联一起。链式存储如图:顺序存储:就是用数组来存储二叉树,顺序存储的方式如图:用数组来存储二叉树如何遍历的呢?如果父节点的数组下标是 i,那么它的左

2025-09-05 00:46:49 850

原创 Day11-栈与队列-代码随想录:str转运算符,单调队列,优先级队列,大顶堆,小顶堆

class MyQueue: #单调队列(从大到小self.queue = deque() #这里需要使用deque实现单调队列,直接使用list会超时#每次弹出的时候,比较当前要弹出的数值是否等于队列出口元素的数值,如果相等则弹出。#同时pop之前判断队列当前是否为空。self.queue.popleft()#list.pop()时间复杂度为O(n),这里需要使用collections.deque()

2025-09-01 22:13:06 1029

原创 Day10-栈与队列-代码随想录:有效括号、队列库

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(,说明有相应的左括号没有右括号来匹配,所以return false。了,说明右括号没有找到对应的左括号return false。第一种情况,字符串里左方向的括号多余了 ,所以不匹配。第二种情况,括号没有多余,但是 括号的类型没有匹配上。第三种情况,字符串里右方向的括号多余了,所以不匹配。首先要弄清楚,字符串里的括号不匹配有几种情况。第二种情况:遍历字符串匹配的过程中,发现。第三种情况:遍历字符串匹配的过程中,

2025-09-01 11:20:25 754

原创 Day8-字符串p2-代码随想录:KMP,字符串匹配

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。输出:输出共一行,为进行了右旋转操作后的字符串。

2025-09-01 10:14:29 487

原创 Day7-字符串p1-代码随想录:双指针,join,判断数字/字母

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。如果想用下标赋值的方式反转字符串,应该先把字符串转成列表,操作完成后再转回字符串。对于输入字符串 "a5b",函数应该将其转换为 "anumberb"输出:打印一个新的字符串,其中每个数字字符都被替换为了number。,从字符串开头算起,每计数至。个,则将剩余字符全部反转。

2025-07-15 11:11:40 658

原创 Day6-哈希表-代码随想录: dict.get(a,0),defaultdict,双指针,多数之和

仅支持固定的默认值类型(如 intstr等),无法直接使用自定义函数或对象作为默认值。如果需要自定义默认值,可以使用或者通过自定义类来实现。是一个功能更灵活的字典类,适合需要动态填充键值的场景。Counter是一个专门用于统计频率的类,适合处理可迭代对象中的元素频率统计。

2025-07-10 00:36:41 1131

原创 DAY5-哈希表-代码随想录(counter,字典操作,幂)

快速判断一个元素是否出现集合里。例如要查询一个名字是否在这所学校里。。

2025-07-08 23:23:20 830

原创 DAY4-链表|代码随想录:(相交节点,环形链表,快慢指针)

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。

2025-06-26 18:16:39 674

原创 DAY3-链表-代码随想录(虚拟头结点,双指针)

给你一个链表的头节点head和一个整数val,请你删除链表中所有满足的节点,并返回。

2025-05-18 23:52:47 379

原创 DAY2-数组-代码随想录(双指针,滑动窗口,螺旋矩阵,区间和,前缀和)

然而,由于城市规划的限制,只允许将区域按横向或纵向划分成两个子区域,而且每个子区域都必须包含一个或多个区块。第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间下标:a,b (b > = a),直至文件结束。在一个城市区域内,被划分成了n * m个连续的区块,每个区块都拥有不同的权值,代表着其土地价值。目前,有两家开发公司,A 公司和 B 公司,希望购买这个城市区域的土地。现在,需要将这个城市区域的所有区块分配给 A 公司和 B 公司。

2025-05-16 23:20:39 276

原创 DAY1-数组-代码随想录(二分查找,双指针,快慢指针,排序

区间定义:左闭右闭时间复杂度:O(logn),其中 n 是数组的长度。空间复杂度:O(1)。

2025-05-15 00:09:50 366

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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