
代码随想录算法打卡
文章平均质量分 51
落叶过河
这个作者很懒,什么都没留下…
展开
-
Day34 不同路径 不同路径 II 整数拆分 不同的二叉搜索树 动规方程 如何遍历
j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量。dp[i] 值表示结点数为i 的不同二叉搜索树的数量。将障碍物位置的dp[][]置为0。原创 2024-12-05 21:21:55 · 353 阅读 · 0 评论 -
Day32 动态规划 斐波那契数 爬楼梯 使用最小花费爬楼梯
dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。第三层楼梯的状态可以由第二层楼梯 和 到第一层楼梯状态推导出来。即第三层可以通过 第二层走一步 或者第一层走两步。原创 2024-12-05 09:40:04 · 269 阅读 · 0 评论 -
Day28 买卖股票的最佳时机 跳跃游戏 跳跃游戏 II K 次取反后最大化的数组和
求最大利润 将每天的正利润加和55. 跳跃游戏 - 力扣(LeetCode)问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点每移动一个单位,就更新最大覆盖范围。贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。45. 跳跃游戏 II - 力扣(LeetCode)1005. K 次取反后最大化的数组和 - 力扣(LeetCode)贪心思想 : 存在负数取反 选择绝对值最大的取反 同理都大于0 选择最小的正数取反 从而局部最优到整体原创 2024-12-04 19:27:31 · 430 阅读 · 0 评论 -
Day27 贪心算法 分发饼干 摆动序列 最大子数组和
贪心策略 局部最优就是当遇到之和为负数直接舍弃归0 并且从后面的一个数作为起点开始累加。判别摆动两种情况 1.cur>0 pre<=0 2.cur<0 pre>=0。其中 如何删除坡度唯一时的多个结点值 就是。原创 2024-11-26 20:17:35 · 337 阅读 · 0 评论 -
Day15 平衡二叉树 二叉树的所有路径 左叶子之和 完全二叉树的节点个数
中序遍历来遍历根节点到叶节点的路径 用到回溯将遍历过的左右结点去除。非递归 栈 前中后序 均可以 只要遍历到每一个结点来判断。层次遍历 遍历所有节点数。原创 2024-11-24 17:38:09 · 174 阅读 · 0 评论 -
Day25 非递减子序列 全排列 全排列 II
但是但是,不能先排序,问题是求原数组中的递增序列 所以要用set集合来去重(4757)后面7要剪枝。记录是否被使用 注意回溯设为false。先搜索所有结果 之后判断结果是否有序。同一树枝上不能出现重复元素 可以通过。解决超时 就要更改去重方式 用。上述比较去重 只能比较。前提是将nums排序。原创 2024-11-23 20:43:56 · 269 阅读 · 0 评论 -
Day24 复原 IP 地址 子集 子集 II
中 substring的ip字段的规范 时间复杂度 O(3^n) 有3^n-1个结点(结果)// 而不是i>0 会将组合中所有的重复元素去除包括同一树枝下。// i>startIndex 是从第一个元素之后出现重复时。每个结点的度为3 高度为规模n 的递归树。可以通过同一树层不能有重复元素 来去重。注意递归深度控制 和。来去重 但是容易超时。原创 2024-11-23 20:40:37 · 255 阅读 · 0 评论 -
Day23 组合总和 组合总和 II 分割回文串 注意startIndex与startIndex+1的区别
剪枝 因为数组已经有序 即当sum值大于target时,无需对其后的分支进行递归运算。回溯:1.方程和参数 2.终止条件 3.for 单层循环逻辑。其中字符串的切割位置 靠startIndex的移动。对象,最终所有路径path集合都会变成最后的状态。的引用,在递归过程中会被不断修改。错在递归时要传strartIndex值 =i。对象是按引用传递的。无重复 超时 但是还是无法解决。需要对相邻的结点进行判断剪枝。在递归时index +1 直接。中的所有路径都指向同一个。原创 2024-11-22 23:01:56 · 324 阅读 · 0 评论 -
Day22 回溯应用 组合 组合总和 III 电话号码的字母组合
对递归树进行 剪枝 将在递归中的for循环的范围 控制在n-(k-path.size())+1 的范围。当path.size() =0 范围至多为3 对子树为4进行剪枝。2.将map转为 String[] 可以优化成0毫秒。回溯就是 递归里面加for循环 暴力搜索全部。原创 2024-11-22 01:22:55 · 195 阅读 · 0 评论 -
D21 修剪二叉搜索树 将有序数组转换为二叉搜索树 二叉搜索树转换为累加树 + 总结
递归 终止条件 当root的值小于low 将右子树直接返回 同理当大于high108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)将有序数组从中间分开,二分法的创建 二叉搜索树AI tell me:将有序数组转换为平衡二叉搜索树的功能,但有一些地方可以优化和改进。特别是,你不需要对数组进行反转,也不需要显式地创建左右子节点后再递归构建子树。可以通过递归直接构建整个树。将有序数组从中间分开,降序的创建 二叉搜索树538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)递归原创 2024-11-19 22:57:29 · 278 阅读 · 0 评论 -
Day18 二叉搜索树的最近公共祖先 二叉搜索树中的插入操作 删除二叉搜索树中的节点
【代码】Day18 二叉搜索树的最近公共祖先 二叉搜索树中的插入操作 删除二叉搜索树中的节点。原创 2024-11-18 20:14:54 · 122 阅读 · 0 评论 -
Day 14 翻转二叉树 对称二叉树 二/N叉树的最大最小深度
翻转之后 会改变原来的二叉树形状。通过判断 两个二叉树是同一个 ,所以要先拷贝再翻转比较 来判断二叉树是否是对称的。而单独使用前序遍历和后序遍历则无法唯一确定一棵二叉树。递归 **最小深度是从根节点到最近叶子节点的最短路径上的节点数量。非递归 层次遍历 当结点的左右子树均为空时deep++3.非递归 普通队列 用双端队列,相当于两个栈。1.先将二叉树翻转 之后判断二叉树是否相等。非递归1 栈 入栈前交换 是前序遍历。. 递归比较左子树和右子树。非递归3 队列 层次遍历。原创 2024-11-13 00:01:30 · 382 阅读 · 0 评论 -
Day13 二叉树的前中后层次遍历 递归非递归 BFS的应用
非递归方法1 左子树不为空 value++ 进栈 ,为空 value++ 访问右子树 ,当标记value为3 出栈 ,出栈顺序即后序。非递归方法1 左子树不为空 进栈 ,为空 出栈 访问右子树 入栈时访问为先序 出栈时访问为中序。非递归 左子树不为空 进栈 ,为空 出栈 访问右子树 出栈时访问为中序。非递归方法2 栈非空栈顶出栈 循环将根节点的左右子树入栈 之后反转。非递归方法2 栈非空 栈顶出栈 循环将栈顶的右左子树入栈。原创 2024-11-12 10:33:14 · 405 阅读 · 0 评论 -
Day7 赎金信 .四数相加II 三数之和 四数之和(hashmap hash数组 双指针)
双指针 + for 同两数之和 之和较大时 right 左移, 较小时 left右移 终止条件 left>=right 注意数组越界。先分成两组 之后hashmap 其中key 为两数之和 value为 之和出现的次数。原创 2024-11-06 00:44:31 · 120 阅读 · 0 评论 -
Day6 有效的字母异位词 两个数组的交集 快乐数 两数之和 (双指针-首尾,快慢)(hash表 hashset hashmap 字符数组)
时间复杂度:O(mlogm+nlogn),其中 m 和 n 分别是两个数组的长度。对两个数组排序的时间复杂度分别是 O(mlogm) 和 O(nlogn),双指针寻找交集元素的时间复杂度是 O(m+n),因此总时间复杂度是 O(mlogm+nlogn)。在算法的每一步中,慢指针在链表中前进 1 个节点,快指针前进 2 个节点(对 getNext(n) 函数的嵌套调用)。先转为set集合去重 之后再求交集 时间复杂度: O(n + m) m 是最后要把 set转成array。从数组头进行遍历比较。原创 2024-11-05 00:13:55 · 147 阅读 · 0 评论 -
day1 算法打卡卡 二分查找 移除元素(同一方向双指针)有序数组的平方(两端 双指针)
其中慢指针代表新的的数组,快指针负责依次遍历 寻找不是要删除的元素 并且将值赋给慢指针 最后slow++的数组下标代表新数组的长度。边界条件 奇数重合 偶数slow>fast 时间复杂度为O(n),相对于暴力排序的解法O(n + nlog n)端点双指针,有序的数组最值只可能在两个端 利用两个端点的指针依次比较并且向中间移动 将较大者放到新数组中。原创 2024-11-03 22:37:20 · 259 阅读 · 0 评论