自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第三十五天

01背包问题 二维题目链接。

2025-07-29 22:47:23 1082

原创 代码随想录算法训练营第三十四天

以上三个问题均用动态规划求解。62 题算 m×n 网格不同路径数,dp [i][j] 为到 (i,j) 的路径数,边界为首行首列全 1,转移方程为 dp [i][j] = 左 + 上。63 题加障碍物,遇障后首行 / 列后续为 0,当前有障则 dp 为 0。96 题算 n 个节点二叉搜索树数,是卡特兰数问题,dp [i] 为 i 个节点的树数,转移方程为左子树数 × 右子树数之和。

2025-07-28 22:48:21 903

原创 代码随想录算法训练营第三十二天

今天的任务非常简单。

2025-07-27 22:29:32 759 3

原创 代码随想录算法训练营第三十一天

这个算法的关键在于:通过排序确保区间按起始点有序,然后通过一次遍历完成合并操作,每次遇到重叠区间就进行合并,不重叠则保存前一个区间。这种方法的时间复杂度是 O (d),其中 d 是数字的位数;这段代码实现了区间合并的功能,用于将重叠的区间合并为一个连续的区间。这段代码实现了 "单调递增的数字" 问题的解决方案,其目标是找到小于或等于给定整数。问题描述:给定一个区间的集合,合并所有重叠的区间,并返回合并后的区间集合。位置及之后的所有位都设为 9,这是为了保证得到的数字是最大可能的。

2025-07-25 23:08:15 1168

原创 代码随想录算法训练营第三十天

例如,对于字符串 "ababcbacadefegdehijhklij",代码会将其划分为 ["ababcbaca", "defegde", "hijhklij"] 三个区间,返回的长度列表为 [9,7,8]。这个算法的关键在于:通过记录每个字符的最后出现位置,确保每个分区包含了该区间内所有字符的所有出现,从而实现了每个字母只出现在一个片段中的要求。这段代码实现了字符串分区的功能,解决的是 "划分字母区间" 的问题。这个问题的核心是:给定一系列区间,找出需要删除的最少区间数量,使得剩余的区间互不重叠。

2025-07-25 22:59:01 729

原创 代码随想录算法训练营第二十九天

问题描述:假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中的一些人的属性(每个 people [i] = [h, k] 表示第 i 个人的身高为 h,前面正好有 k 个身高大于或等于 h 的人)。如果存在,返回该起点的索引;这个算法的时间复杂度是 O (n),空间复杂度是 O (1),非常高效。这个算法的时间复杂度是 O (n²)(排序 O (nlogn) + 插入操作 O (n²)),空间复杂度是 O (n)。这个算法的时间复杂度是 O (n),空间复杂度是 O (n)。

2025-07-23 22:59:22 1282

原创 代码随想录算法训练营第二十八天

这种方法的原理是:要最大化数组和,应该优先对最小的元素进行取反(尤其是负数),因为这会带来最大的增益。这种方法的时间复杂度是 O (n),其中 n 是股票价格数组的长度,因为只需要遍历一次数组。算法的核心思想是:只要第二天的股价高于当天股价,就进行一次交易(当天买入,第二天卖出),将所有这些正的差价累加起来,就得到了最大利润。这段代码实现了 "K 次取反后最大化的数组和" 的解决方案,采用了优先队列(最小堆)来高效处理。这段代码实现了判断能否到达数组最后一个位置的功能,采用了贪心算法的思想,效率较高。

2025-07-22 23:21:07 1006

原创 代码随想录算法训练营第二十七天

这种解法的时间复杂度是 O (n log n + m log m),其中 n 和 m 分别是两个数组的长度,主要消耗在排序操作上。该算法的贪心策略体现在:总是用最小的能满足孩子胃口的饼干去满足这个孩子,这样可以保留更大的饼干去满足可能有更大胃口的孩子,从而最大化满足的孩子总数。这段代码实现了求解 "最大子数组和" 问题的解决方案,采用的是经典的贪心算法思路(也可以理解为 Kadane 算法的简化版本)。这段代码实现了 "分发饼干" 问题的解决方案,其核心思路是使用贪心算法来最大化能够满足的孩子数量。

2025-07-21 23:31:47 1299

原创 代码随想录算法训练营第二十五天

个排列,每个排列需要 O (n) 的时间来复制。这段代码实现了经典的 N 皇后问题求解,能够的是回溯算法来找出所有可能的摆放方案,使得每个方案中 N 个皇后彼此不会相互攻击(即不在同一行、同一列或同一斜线上)。采用深度优先搜索 (DFS) 结合回溯法,通过递归的方式探索所有可能的元素排列,使用一个布尔类型的数组记录元素是否已被使用,确保每个元素在每个排列中只出现一次。这段代码时间复杂度为 O (2^n)(最坏情况下需要探索所有可能的子序列),空间复杂度为 O (n)(递归栈深度和临时存储的子序列长度)。

2025-07-19 23:54:35 925

原创 代码随想录算法训练营第二十四天

例如,对于数组 [1,2,2],其所有不重复子集为:[], [1], [2], [1,2], [2,2], [1,2,2]。这种方法通过回溯遍历所有可能的分割方式,同时进行有效性检查,确保只保留符合 IP 地址规范的结果,时间复杂度为 O (3^4),因为每个 IP 段最多有 3 种可能的分割方式,总共 4 个段。这段代码解决的是 "子集 II" 问题,即在包含重复元素的数组中找出所有不重复的子集。这段代码解决的是 "子集" 问题,即找出一个数组的所有可能子集(幂集)。去重逻辑是本题的关键,通过排序和。

2025-07-18 22:58:54 1137

原创 代码随想录算法训练营第二十三天

这段代码实现了字符串分割回文子串的功能,即找出一个字符串所有可能的分割方案,使得每个子串都是回文串。这段代码实现了组合总和问题的解决方案,允许元素重复使用但会避免重复的组合结果。:使用深度优先搜索 (DFS) 结合回溯法,寻找所有可能的组合,使其和等于目标值。结合数组已排序的前提,这段代码能有效避免产生重复的组合。这个改动确保了每个元素在一个组合中只能被使用一次。这段代码实现了组合总和问题的另一个变种 ——开头的组合,从而避免重复。递归调用时传入的索引是。开头的组合,跳过第二个。,它会确保只考虑第一个。

2025-07-17 22:40:15 1102

原创 代码随想录算法训练营第二十二天

这个算法通过回溯法穷举了所有可能的字母组合,时间复杂度是 O (3^m * 4^n),其中 m 是对应 3 个字母的数字个数,n 是对应 4 个字母的数字个数(7 和 9)。这个算法的时间复杂度是 O (C (n,k)×k),其中 C (n,k) 是组合数,空间复杂度是 O (k)(递归栈深度和 path 的大小)。这段代码实现了 "组合总和 III" 的问题求解,即从 1 到 9 中选取 k 个不重复的数字,使得它们的和等于 n,找出所有可能的组合。这是一个经典的回溯算法应用场景。

2025-07-16 22:36:29 970

原创 代码随想录算法训练营第二十一天

利用 BST 的有序性,无需遍历所有节点,通过比较当前节点值与范围的关系,直接舍弃不符合条件的子树,大幅减少计算量。:利用有序数组的特性,每次选中间元素作为根节点,递归构建左右子树,确保树的高度平衡。,可通过 “二分法” 确保左右子树节点数量均衡,从而保证高度平衡。任意节点的左右子树高度差的绝对值不超过 1。这段代码用于修剪二叉搜索树(BST),保留所有节点值不在。这段代码的功能是将有序数组转换为。有序数组 → 高度平衡 BST。:若当前节点为空,返回。

2025-07-15 15:21:29 1502

原创 代码随想录算法训练营第二十天

【代码】代码随想录算法训练营第二十天。

2025-07-14 14:51:31 364

原创 代码随想录算法训练营第十八天

总结上述二叉树题目解法,均以递归为核心。最小绝对差和众数问题利用 BST 中序遍历有序性,通过记录前驱节点简化计算;最近公共祖先则靠递归遍历左右子树,依返回结果判断位置。这些解法体现了递归在树问题中的高效性,及利用数据结构特性简化逻辑的重要性。

2025-07-13 23:54:03 923

原创 代码随想录算法训练营第十七天

总结上述二叉树相关题目解法,核心均围绕递归与树的特性展开。构造最大二叉树用递归分治,以最大值为根划分左右子树;合并二叉树通过前序遍历同步处理两树节点;BST 搜索和验证则依托其左小右大特性,分别用递归缩小范围和中序遍历检查升序。这些解法体现了递归在树问题中的高效应用,以及利用数据结构特性简化逻辑的关键思路。

2025-07-13 23:41:08 1122

原创 代码随想录算法训练营第十六天

来判断二叉树中是否存在一条从根节点到叶子节点的路径,使得该路径上所有节点的值之和等于给定的目标和。这段代码的核心思路是借助深度优先搜索(DFS)来找出二叉树最底层最左边节点的值。,找出二叉树中所有从根节点到叶子节点的路径,使得路径上节点值的和等于给定的目标和。来找到二叉树最底层的最左边节点的值。这段代码的解题思路是利用 ** 中序遍历(inorder),因此后序数组的最后一个元素必定是当前子树的根节点。这段代码的解题思路是使用。这段代码的解题思路是使用。这段代码的解题思路是使用。: 后序遍历的顺序是。

2025-07-11 19:34:02 678

原创 代码随想录算法训练营第十五天

解题思路这是一道判断二叉树是否为平衡二叉树的题目,核心是递归计算子树高度并检查平衡性,思路拆解如下:平衡二叉树定义:递归辅助函数 :主函数 :核心逻辑:解题思路这是一道枚举二叉树所有根到叶子路径的题目,核心是回溯法遍历所有路径,思路拆解如下:路径记录:递归回溯:复杂度:执行流程:解题思路这是一道计算二叉树所有左叶子节点值之和的题目,核心是递归遍历并判断左叶子节点,思路拆解如下:左叶子节点定义:递归遍历:关键点:执行流程:解题思路将大问题分成小问题。

2025-07-09 23:01:42 745

原创 代码随想录算法训练营第十四天

对树的递归理解更进一层,解决了许多树的递归题。总结递归就是将大的问题分成小问题。

2025-07-09 22:37:25 716

原创 代码随想录算法训练营第十三天

今天的收获特别大,对树的递归遍历,迭代遍历和相关题目掌握更深了,除此之外,不仅是技术上的提升,一天写了这么多的题目,leetcode上题目完成数的增加也让我更加自信,学习更加有兴趣了。希望天天都有这么多的收获。

2025-07-08 23:14:23 1445

原创 代码随想录算法训练营第十一天

将"+","-","*","/"加入set集合,遍历字符串数组,如果该字符串在set集合内,代表其是运算符,将栈中两个整数弹出进行运算,再将运算结果压入栈中;如果该字符串不在set集合中说明该字符串是整数,将其转成整数压入栈中。自定义优先队列类,定义了弹出方法poll(),添加方法add(),获得队头方法(),具体题解看。

2025-07-06 22:28:30 387

原创 代码随想录算法训练营第十天

对栈和队列的函数和用法理解更深,这里总结栈和队列的函数。

2025-07-04 19:48:29 488

原创 代码随想录算法训练营第九天

得到next数组:首先对数组进行初始化,首先是对j 进行初始化,起始下标为 0,对next数组第0位进行初始化,因为当下标为0时,该next数组退无可退,所以next[0] = 0;=needle[j]时,j 进行回退, j = next[j-1],当needle[i] == needle[j] 时,将其值存入next第i个位置,next[i] == ++ j。3,当haystack[i] == needle[j]相等时,j 向后移,进行下一个匹配。这段代码的解题思路可概括为。

2025-07-03 22:44:00 378

原创 代码随想录算法训练营第八天

反转前 k 个字符(或剩余不足 k 个时的全部剩余字符),然后移动索引,每次处理 2k 个字符的跨度。当该字符为字母则直接输出,否者输出number。

2025-07-02 23:09:23 237

原创 代码随想录算法训练营第七天

先对第一个数i进行遍历,然后在大于i的空间内进行双向指针遍历,重点是题目要求不能出现重复的三元组,所有得对i,left,right 去重,去重思路如代码所示,且这里实现了减枝,当i 的值 大于 0 ,说明该三元组不能再等于0,直接返回结果。先将前两个数之和存储道哈希表,再从哈希表里的三四数组之和的相反值取得value加入res中。和三数之和一样的思路,但是也要进行对应的剪枝和去重。与上一题得思路一致,甚至更简单。

2025-07-02 22:59:06 406

原创 代码随想录算法训练营第六天

使用set的快速判断是否集合包含某个元素,如果包含,则返回false,当得到1时返回true。每次调用getHappy时获得一个新的元素,若存在说明后面的过程会重新执行,所以直接返回false。使用HashMap解决该问题,遍历s集合,将每个元素插入map,若已存在则value + 1,遍历t集合时,对value进行减一操作,如果小于0,则返回false。使用两个set集合,利用到了set去重和快速查询使用包含某个值,最后使用函数式编程将其转换成list类型。

2025-06-30 15:48:53 213

原创 Redis面试题| 认识Redis以及Redis数据类型

先一句话概括一下Redis,Redis是一个基于内存,支持多种数据结构的存储系统,可以作为数据库,缓存和消息中间件。再从数据类型和支持功能的角度,分别列举Redis拥有的功能,Redis支持的数据结构有字符串,哈希,列表,集合和有序集合等,在此基础上Redis还添加了bitmaps, hyperloglogs和geo等数据类型。Redis还内置了复杂,LUA脚本,LRU驱动事件,事务和持久化,还可以通过哨兵和集群来实现高可用。

2025-06-29 22:03:43 1157

原创 代码随想录算法训练营第四天

收获了链表快慢指针的写法,递归的写法,对这些写法掌握得更深,比如想获得链表的中间,可以快慢指针从头开始同时进行遍历,快指针移动两位,慢指针移动一位,当快指针到终点时,慢指针就刚好到中间位置等等用法,后续继续加油。

2025-06-28 22:11:21 403

原创 代码随想录算法训练营第三天

head.next.next = head:将后续节点的 next 指针指向当前节点,实现局部反转。head.next = null:断开当前节点的原有连接,防止形成环。这两行代码共同作用,逐步将链表从尾部到头部逐个节点反转,最终实现整个链表的反转。今天是写链表的题型,主要收获是两种解题方式,循环迭代法和递归法,尤其是递归法,几行代码解题的感觉还是很爽,可以提升我写算法的兴趣。

2025-06-27 23:24:43 816

原创 代码随想录算法训练营第二天

今天主要是养成每天写代码的习惯,技能收获没有很多,继续加油。

2025-06-26 22:00:45 439

原创 代码随想录算法训练营第一天|704.二分查找、35.搜索插入位置、34.在排序数组中查找元素的第一个和最后一个位置、27.移除元素、977.有序数组的平方

在排序数组中查找元素的第一个和最后一个位置以前对二分非常了解,但是对边界条件经常需要仔细想一遍,看了卡尔哥总结的left == right是否有意义来判断边界条件,区分左闭右开和左闭右闭,再加上几遍实操,对这个边界条件更加清楚了,除此之外,还更进一步掌握了双指针写法。希望接下来在算法训练营的60多天,收获一天比一天多,感觉卡尔哥的算法训练营。

2025-06-25 23:53:51 1009

空空如也

空空如也

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

TA关注的人

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