wuyijia

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

随笔分类 -  代码随想录刷题记录

1 2 下一页

代码随想录算法训练营-动态规划-3-(0-1背包问题)|416. 分割等和子集、1049. 最后一块石头的重量 II
摘要:416. 分割等和子集 01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); 如果dp[j] == j 说明,集合中的子集总和正好可以凑成总和j,理解这一点很重要。 1 class Solution: 2 def canPartit 阅读全文

posted @ 2023-10-15 11:25 小吴要努力 阅读(8) 评论(0) 推荐(0) 编辑

代码随想录算法训练营-动态规划-2|62. 不同路径、63. 不同路径 II、343. 整数拆分、96. 不同的二叉搜索树
摘要:62. 不同路径 1 class Solution: 2 def uniquePaths(self, m: int, n: int) -> int: 3 # 创建一个二维列表用于存储唯一路径数 4 dp = [[0] * n for _ in range(m)] 5 6 # 设置第一行和第一列的基本 阅读全文

posted @ 2023-09-24 11:46 小吴要努力 阅读(5) 评论(0) 推荐(0) 编辑

代码随想录算法训练营-动态规划-1|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
摘要:509. 斐波那契数 1 class Solution: 2 def fib(self, n: int) -> int: 3 if n <= 2: 4 return n 5 6 prev1, prev2 = 0, 1 7 for _ in range(2, n+1): 8 sum_value = p 阅读全文

posted @ 2023-09-23 11:47 小吴要努力 阅读(6) 评论(0) 推荐(0) 编辑

代码随想录算法训练营-贪心算法-5|56. 合并区间、738. 单调递增的数字、968. 监控二叉树
摘要:56. 合并区间 时间复杂度: O(nlogn) 空间复杂度: O(logn),排序需要的空间开销 1 class Solution: 2 def merge(self, intervals): 3 result = [] 4 if len(intervals) == 0: 5 return res 阅读全文

posted @ 2023-09-21 13:39 小吴要努力 阅读(4) 评论(0) 推荐(0) 编辑

代码随想录算法训练营-贪心算法-4|406. 根据身高重建队列、452. 用最少数量的箭引爆气球、435. 无重叠区间
摘要:406. 根据身高重建队列 1. 一定要想如何确定一个维度,然后再按照另一个维度重新排列。 2. 先确定身高的维度,降序排列。 3. 按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。 4. 局部最优:优先按身高高的peop 阅读全文

posted @ 2023-09-18 11:21 小吴要努力 阅读(5) 评论(0) 推荐(0) 编辑

代码随想录算法训练营-贪心算法-3|134. 加油站、135. 分发糖果、860. 柠檬水找零
摘要:134. 加油站 局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。全局最优:找到可以跑一圈的起始位置。 时间复杂度:O(n) 空间复杂度:O(1) 1 class Solution: 2 def canCompleteCircuit(se 阅读全文

posted @ 2023-09-17 23:17 小吴要努力 阅读(11) 评论(0) 推荐(0) 编辑

代码随想录算法训练营-贪心算法-2|55. 跳跃游戏、45. 跳跃游戏 II、1005. K 次取反后最大化的数组和
摘要:55. 跳跃游戏 1. 跳跃的覆盖范围。这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点! 2. 贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。 时间复杂度: O(n) 空间复杂度: O(1) 1 class Solution: 2 阅读全文

posted @ 2023-09-17 10:42 小吴要努力 阅读(10) 评论(0) 推荐(0) 编辑

代码随想录算法训练营-贪心算法-1|455. 分发饼干、376. 摆动序列、53. 最大子数组和、122. 买卖股票的最佳时机 II
摘要:1.贪心算法一般分为如下四步: 将问题分解为若干个子问题 找出适合的贪心策略 求解每一个子问题的最优解 将局部最优解堆叠成全局最优解 455. 分发饼干 1. 局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。 时间复杂度:O(nlogn) 空间复杂度:O(1 阅读全文

posted @ 2023-09-16 10:25 小吴要努力 阅读(10) 评论(0) 推荐(0) 编辑

代码随想录算法训练营-回溯算法|491.递增子序列、46. 全排列、47. 全排列 II、332. 重新安排行程、37. 解数独
摘要:491. 递增子序列 不对原数组进行排序,利用set对同层的子集进行去重。 1 class Solution: 2 def findSubsequences(self, nums): 3 result = [] 4 path = [] 5 self.backtracking(nums, 0, pat 阅读全文

posted @ 2023-09-10 13:19 小吴要努力 阅读(7) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第二十八天|93. 复原 IP 地址,78. 子集,90. 子集 II
摘要:【参考链接】 93. 复原 IP 地址 【注意】 1.切割问题就可以使用回溯搜索法把所有可能性搜出来。 2.startIndex一定是需要的,因为不能重复分割,记录下一层递归分割的起始位置。 3.本题我们还需要一个变量pointNum,记录添加逗点的数量。 4.分割的段数作为终止条件。pointNu 阅读全文

posted @ 2023-06-06 14:10 小吴要努力 阅读(13) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第二十七天|39. 组合总和,40. 组合总和 II,131. 分割回文串
摘要:【参考链接】 39. 组合总和 【注意】 1.candidates 中的数字可以无限制重复被选取。 2.在for循环中进行剪枝。剪枝前需要对数组进行排序。 【代码】 1 class Solution(object): 2 def __init__(self): 3 self.path = [] 4 阅读全文

posted @ 2023-06-05 11:52 小吴要努力 阅读(15) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第二十五天|216. 组合总和 III、17. 电话号码的字母组合
摘要:【参考连接】 216. 组合总和 III 【注意】 1.组合不强调元素之间的顺序。 【代码】 1 class Solution(object): 2 def __init__(self): 3 self.res = [] 4 self.sum_now = 0 5 self.path = [] 6 d 阅读全文

posted @ 2023-06-04 14:08 小吴要努力 阅读(15) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第二十四天|回溯算法理论知识,77. 组合
摘要:【参考链接】 1.属于纯暴力算法 2.能解决组合、切割、子集、排列(强调元素的顺序)、棋盘问题(n皇后,解数独)问题。 3.一般都可以抽象成一个n叉树问题。横方向是for(遍历集合元素,主体:处理节点,递归,回溯(撤销处理节点的情况)),纵方向是递归(一般没有返回值,终止条件是收集结果的时候)。 4 阅读全文

posted @ 2023-06-03 12:49 小吴要努力 阅读(13) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第二十三天|669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树
摘要:[参考链接] 669. 修剪二叉搜索树 需要递归修剪。 [代码] 1 # Definition for a binary tree node. 2 # class TreeNode(object): 3 # def __init__(self, val=0, left=None, right=Non 阅读全文

posted @ 2023-06-02 11:02 小吴要努力 阅读(5) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先,701. 二叉搜索树中的插入操作,450. 删除二叉搜索树中的节点
摘要:[参考链接] 235. 二叉搜索树的最近公共祖先 [注意] 1.因为是有序树,所以如果中间节点是 q 和 p 的公共祖先,那么中间节点的数组 一定是在[p, q]区间的。即中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p。 2.那么只要从上到下去遍历,遇到 cur节点 阅读全文

posted @ 2023-06-01 19:20 小吴要努力 阅读(5) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第二十一天|530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先
摘要:【参考链接】 530. 二叉搜索树的最小绝对差 【注意】 1.二叉搜索树采用中序遍历,其实就是一个有序数组。 2.使用双指针,更快。 【代码】 1 # Definition for a binary tree node. 2 # class TreeNode(object): 3 # def __i 阅读全文

posted @ 2023-05-30 11:46 小吴要努力 阅读(5) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第二十天|654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树
摘要:【参考链接】 654. 最大二叉树 【注意】 1.构造二叉树,都需要用前序遍历。 2.二叉树的根是数组中的最大元素。 3.没必要构造新数组,通过下标控制左右区间。运行效率会高很多。 【代码】 1 # Definition for a binary tree node. 2 # class TreeN 阅读全文

posted @ 2023-05-29 13:18 小吴要努力 阅读(7) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第十八天|513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树
摘要:【参考链接】 513. 找树左下角的值 【注意】 1.用递归的话就就一直向左遍历,但是到最后一个,它未必是最后一行。是要找到树的最后一行的最左边的值。(不一定是指是左孩子) 2.如果使用递归法,如何判断是最后一行呢,其实就是深度最大的叶子节点一定是最后一行。 3.只要是优先遍历左都可以,所以前中后序 阅读全文

posted @ 2023-05-28 16:07 小吴要努力 阅读(7) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第十七天|110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
摘要:【参考链接】 110. 平衡二叉树 【注意】 1.一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 2.求高度一定要用后序遍历。 【代码】 1 # Definition for a binary tree node. 2 # class TreeNode(obj 阅读全文

posted @ 2023-05-27 19:59 小吴要努力 阅读(8) 评论(0) 推荐(0) 编辑

代码随想录算法训练营第十六天|104. 二叉树的最大深度、559. N 叉树的最大深度、111. 二叉树的最小深度、222. 完全二叉树的节点个数
摘要:【参考链接】 104. 二叉树的最大深度 【注意】 1. 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)。 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)。 2.根节点的高度就是二叉树的 阅读全文

posted @ 2023-05-26 17:17 小吴要努力 阅读(11) 评论(0) 推荐(0) 编辑

1 2 下一页
点击右上角即可分享
微信分享提示