自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ✅DAY35 动态规划DP | 背包问题 | 416. 分割等和子集

有一个容量为 C 的背包和 N 件物品。每件物品有:•w[i] :放入背包的重量。•v[i] :放入背包的价值。目标是选择若干物品装入背包,使得在总重量不超过 C 的情况下,总价值最大化。每件物品只能选择次。暴力回溯:大概?二维DP解法:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])两种情况,分别是放物品1 和 不放物品1,我们要取最大值(毕竟求的是最大价值)

2024-11-20 17:30:04 375

原创 ✅DAY34动态规划DP | 62.不同路径 | 63. 不同路径 II | 343. 整数拆分 | 96.不同的二叉搜索树

所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]dp[3]= 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量。

2024-11-18 22:19:09 277

原创 ✅DAY32 动态规划DP | 509. 斐波那契数 | 70. 爬楼梯 | 746. 使用最小花费爬楼梯

• 找到子问题与父问题之间的关系,写出递推公式。3.

2024-11-16 23:43:24 1143

原创 ✅DAY31 贪心算法终 | 56. 合并区间 | 738.单调递增的数字

解题思路:跟之前的重叠题差不多,重点在更新上,通过result里的值进行调整而不是在原数组上变动。解题思路:从后往前遍历,取两位数,如果前一位>后一位,

2024-11-15 22:15:19 600

原创 ✅DAY30 贪心算法 | 452. 用最少数量的箭引爆气球 | 435. 无重叠区间 | 763.划分字母区间

解题思路:首先把原数组按左边界进行排序。然后比较[i-1]的右边界和[i]的左边界是否重叠,如果重叠,更新当前右边界为最小右边界和[i+1]的左边界判断是重叠。的方式通常更直观,因为只需要维护一个变量 current_end 表示当前的射击位置,不需要更新区间边界,也减少了不必要的操作。

2024-11-15 16:45:56 641

原创 ✅DAY29贪心算法续 | 134. 加油站 | 135. 分发糖果 | 860.柠檬水找零 | 406.根据身高重建队列

• 如果当前孩子的评分比右边的孩子高,且当前孩子的糖果数不满足(即不比右边的孩子多 1),则调整当前孩子的糖果数为 右边孩子的糖果数 + 1。解题思路:根据身高 h 降序排序(高的在前面),在身高相同的情况下,按 k 值升序排序(较小的 k 在前面)。• 如果当前孩子的评分比左边的孩子高,那么当前孩子的糖果数就比左边孩子的糖果数多 1。:O(n^2),排序的时间复杂度为 O(n log n),但插入操作为 O(n^2)。通过这种方法,我们可以确保所有评分更高的孩子拥有比相邻评分低的孩子更多的糖果。

2024-11-15 15:33:21 306

原创 ✅DAY28 贪心算法续 | 122.买卖股票的最佳时机II | 55. 跳跃游戏 | 45.跳跃游戏II | 1005.K次取反后最大化的数组和

解题思路:回溯算法(超时),计算当前可以跳跃的最远位置 furthestJump,它等于当前位置加上当前位置的跳跃数 nums[position],但不能超过数组的末尾。相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])解题思路:每次i走到当前覆盖范围的末端时,就更新需要的步数,并且把当前覆盖范围更新为前面遍历取得的最大范围。用cover记录每个位置能覆盖的长度,判断是否可以到达末尾。

2024-11-13 23:10:48 215

原创 ✅DAY27贪心算法 | 455.分发饼干 | 376. 摆动序列 | 53. 最大子序和

计算 prediff(nums[i] - nums[i-1]) 和 curdiff(nums[i+1] - nums[i]),如果。尤其是涉及多个约束条件的复杂问题,贪心选择可能导致非最优解。:从初始状态开始,每一步按照选择标准做出决策,直到找到问题的完整解决方案。解题思路:就从小到大尝试,满足则把小孩的index+1,最后返回index。:只有当问题满足最优子结构和无后效性时,贪心算法才能得到全局最优解。:分析问题是否满足贪心算法的条件,确保贪心选择可以得到最优解。:贪心算法通常实现简单,运行速度较快。

2024-11-13 14:48:57 762

原创 ✅DAY25 回溯终 | 491.递增子序列 | 46.全排列 | 47.全排列 II | 51. N皇后

因为 path 是列表,传递的是引用,当 path 被修改时,result 中的 path 也会随之改变,导致最终结果出现错误。1. nums[i] == nums[i-1]:表示当前元素 nums[i] 和前一个元素 nums[i-1] 是相同的。这样可以保证只有第一层选择了 nums[i-1] 后,才可以在下一层选择 nums[i]。• 如果 nums[i-1] 在当前层级未被使用(即 not used[i-1] 为 True),则跳过 nums[i],从而避免生成重复的排列。

2024-11-12 17:50:53 440

原创 ✅DAY24 回溯续 | 93.复原IP地址 | 78.子集 | 90.子集II

解题思路:模拟分割的每种情况,首先满足前导不为0,s中间不存在非数值,且每段取值区间在[0,255]解题思路:有重复值,当遇到重复值值应当要跳过,避免造成重复解。解题思路:找出所有切割的可能性,本题没有重复元素。

2024-11-12 16:28:16 241

原创 ✅DAY23 回溯算法续 | 39. 组合总和 | 40.组合总和II | 131.分割回文串

的条件,避免同层级重复,但允许跨层级选取相同数字,从而得到 [1, 1, 1] 的组合。理解上来说,因为第一次遇到的数值已经把所以可能性都测试了,所以遇到相同值的时候跳过就避免了组合重复值。通过在递归函数中设置。

2024-11-09 00:23:52 135

原创 ✅DAY22 回溯算法 | 77. 组合 | 216.组合总和III | 17.电话号码的字母组合

的区间,右边界设为 n - (k - len(path)) + 2,这样才能确保包含位置 n - (k - len(path)) + 1。2. 为了保证剩下的数字够用,最大位置应为 n - (k - len(path)) + 1。1. 原理:通过递归地构建解决方案,并在发现当前解不符合条件时,“回溯”到上一步,尝试其他可能的路径。:for loop里限制为 range(start, n - (k - len(path)) + 2)1. 还需要选 k - len(path) 个元素才能达到组合的长度 k。

2024-11-08 17:28:54 265

原创 ✅DAY21 二叉树终 | 669. 修剪二叉搜索树 |

解题思路:需要删除不在[low, high]范围内的值,满足low删除node的左子树和满足high删除node的右子树一定都不符合[low, high]。所以如果要删除当前node满足low,只需考虑node的右子树;要删除当前node满足high,只需考虑node的左子树。• 每次遍历到一个节点,将该节点的值加上 self.pre,并更新 self.pre 为该节点的新值。:使用反序中序遍历(右 -> 中 -> 左)来访问树,这样可以保证从大的节点开始依次累加。669. 修剪二叉搜索树。

2024-11-06 15:56:44 337

原创 ✅DAY20 二叉树续 | 235. 二叉搜索树的最近公共祖先 | 701.二叉搜索树中的插入操作 | 450.删除二叉搜索树中的节点

解题思路:因为是二叉搜索树,满足左小右大的条件。

2024-11-04 21:21:14 251

原创 ✅DAY18二叉树续 | 530.二叉搜索树的最小绝对差 | 501.二叉搜索树中的众数 | 236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差530.二叉搜索树的最小绝对差解题思路:中序遍历+数组解题思路:中序递归不带数组解题思路:迭代法。

2024-11-02 23:14:28 175

原创 ✅DAY17 二叉树续 | 654.最大二叉树 | 617.合并二叉树 | 700.二叉搜索树中的搜索 | 98.验证二叉搜索树

•:O(n^2),其中 n 是数组的长度。每次调用 max(nums) 和 nums.index() 需要 O(n),而每次递归调用的规模会减小。•:O(n),递归调用栈的最大深度在最坏情况下是 O(n),如数组为递增或递减序列。

2024-11-01 21:31:19 161

原创 ✅DAY16二叉树续 | 513.找树左下角的值 | 112. 路径总和 | 106.从中序与后序遍历序列构造二叉树

解题思路:迭代法比较直接解题思路:递归法,找到深度最深的位置,把最左侧的值储存:回溯过程通过递归的调用栈隐式实现。因为 depth 是在递归调用时通过参数传递的,因此不需要手动恢复 depth,每次递归调用都会创建一个新的 depth 变量副本,递归返回时自动恢复到上一层。

2024-11-01 17:05:57 291

原创 ✅DAY15 二叉树续 | 222.完全二叉树的节点个数 | 110.平衡二叉树 | 257. 二叉树的所有路径 | 404.左叶子之和 | 222.完全二叉树的节点个数

解题思路:用后序解题解题思路:利用完全二叉树的原理去解答。

2024-10-30 22:56:37 262

原创 ✅DAY14 二叉树续 | 226.翻转二叉树 | 101. 对称二叉树 | 104.二叉树的最大深度 | 111.二叉树的最小深度

解题思路:最直接的就是递归,前序遍历解题思路:迭代法,深度优先遍历,前序遍历解题思路:广度优先遍历(层序遍历)*** 使用前后序解题思路是一致的,但是用需要注意root节点交换后,原右节点已到左节点,所以code上两遍操作都是左节点。

2024-10-30 00:30:24 201

原创 ✅DAY13 二叉树 |

两种主要的形式:满二叉树和完全二叉树满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。结构:深度为k,有2^k-1个节点的二叉树完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(h从1开始),则该层包含 1~ 2^(h-1) 个节点。*** 堆heap就是一棵完全二叉树,同时保证父子节点的顺序关系 堆属性:在最大堆中,任何一个父节点的值

2024-10-28 22:34:57 2661

原创 ✅DAY11栈和队列 | 150. 逆波兰表达式求值 | 239. 滑动窗口最大值 | 347.前 K 个高频元素

解题思路:遇到运算符就把前两个数字弹出做运算,然后再append到最后。需要对一个mapping的处理。

2024-10-26 21:54:29 310

原创 ✅DAY10 栈和队列 | 232.用栈实现队列 | 225. 用队列实现栈 | 20. 有效的括号 | 1047. 删除字符串中的所有相邻重复项

小伙伴们共勉~

2024-10-25 22:54:14 290

原创 ✅DAY9 字符串+KMP | 151.翻转字符串里的单词 | 卡码网:55.右旋转字符串 | 28. 实现 strStr() | 459.重复的子字符串 | 字符串总结 | 双指针回顾

小伙伴们共勉~

2024-10-24 22:21:26 294

原创 ✅DAY8 字符串str | 344.反转字符串 | 541. 反转字符串II | 卡码网:54.替换数字

解题思路:reverse可以直接用text[::-1]。定义需要reverse和keep的部分,累加到res。解题思路:灵活应用左右指针,每次loop的step = 2*k步。同时把str改为list更好替换。解题思路:python解法好像没那么多弯弯绕绕。解题思路:双指针解法,直接把两边调转。解题思路:reversed。卡码网:54.替换数字。

2024-10-23 14:58:21 194

原创 ✅DAY 7 HashTable | 454. 四数相加 II | 383. 赎金信 | 15. 三数之和 | 18. 四数之和

O(n²),其中 n 是每个数组的长度。:O(n + m),其中 n 和 m 分别是 ransomNote 和 magazine 的长度。:外层循环是 O(n),内层双指针操作最多也是 O(n),因此双指针部分的时间复杂度为 O(n²)。:O(k),其中 k是ransomNote和magazine 中不同字符的数量。:O(n²),哈希表中最多会存储 n² 个 n1 + n2 的组合。:O(n²),因为对于每个元素,内层遍历需要 O(n) 时间。:O(n log n),其中 n 是数组的长度。

2024-10-22 22:48:32 290

原创 ✅DAY6 哈希表理论 | 242.有效的字母异位词 | 349. 两个数组的交集 | 202. 快乐数 | 1. 两数之和

1. 在 Python 中,hashset 通常指的是**set** 数据结构,set 是一个无序且不重复的元素集合,底层通过。:O(n),其中 n 是字符串的长度。:O(n²),因为我们用了两个嵌套循环,每次都要检查所有可能的配对。:O(1),因为字典的空间最多存储 26 个字母的计数。:O(n),因为我们需要额外的空间存储已访问过的元素。:O(1),没有额外的空间使用,除了返回的结果。:O(1),因为最多存储 26 个字母的计数。:O(n),同样是遍历两次字符串。:获取两个集合中不重复的元素。

2024-10-21 22:35:46 432

原创 ✅DAY4 链表题 | LC24 | LC19 | LC160 | LC142

此时,将 slow 重新指向链表头节点,fast 保持在相遇点,两者每次各移动一步,最终它们会在环的起点再次相遇。,所以无论链表 A 和链表 B 的长度是否相同,两个指针总会在它们走完 m + n 步时,相遇在同一个位置。解题思路:通过双指针。fast 先走n+1步,然后fast和slow同时走直到尾,slow停在要删除的上一节点位置,fast和slow之间间隔n+1步。解题思路:先把A设较长,B为较短的,等A走到B长度位置时,判断剩下的长度是否存在相交内容。:O(n),需要额外的空间存储访问过的节点。

2024-10-18 23:57:16 381

原创 ✅DAY3 链表 | 203.移除链表元素 | 707.设计链表 | 206.反转链表

链表的每个节点都需要存储指向下一个节点的指针,这会带来额外的内存开销,特别是在存储小型数据时,指针的内存开销变得相对较大。元素(尤其是在数组的中间位置)通常需要移动后续的所有元素,以保持数组的连续性,时间复杂度为。:链表的节点在内存中不需要是连续存储的,更灵活地利用内存的零碎空间,有效避免内存浪费。:数组需要在内存中占用连续的空间,在大型数组的情况下,容易内存分配失败或者性能下降。:数组支持随机访问,通过索引可以直接访问任意位置的元素,时间复杂度为。:数组不需要额外的指针存储,只存储数据本身。

2024-10-18 22:43:19 316

原创 ✅DAY2 数组part02 | LC209 | LC59 ect

矩阵的每一圈是独立填充的,最外层一圈填充完后进入下一层。填充的循环次数是 n // 2,如果 n 为奇数,则最后会剩下一个单独的中心点需要手动填充。还需额外注意空值情况。• 第一圈从 (0, 0) 到 (n-1, n-1),然后从 (1, 1) 开始填充下一圈。,需要额外手动填充最后的中心位置((n//2, n//2))。进行的,从外层向内层一圈一圈地填充矩阵。,循环次数为 n // 2,每次填充完四个边之后即可完成。:保持 X 坐标不变,Y 坐标从左向右递增。:保持 X 坐标不变,Y 坐标从右向左递减。

2024-10-17 15:56:17 464

原创 ✅DAY1 数组理论基础 | 704. 二分查找 | 27. 移除元素 | 977.有序数组的平方

解题思路:利用双指针寻找目标值。

2024-10-16 14:18:00 233 2

空空如也

空空如也

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

TA关注的人

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