自定义博客皮肤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)
  • 收藏
  • 关注

原创 算法题(day30)- 用最少数量的箭引爆气球 & 无重叠区间

【代码】算法题(day30)- 用最少数量的箭引爆气球 & 无重叠区间。

2025-03-28 17:26:01 105

原创 算法题(day29)- 加油站 & 分发糖果 & 柠檬水找零

先从前先后遍历,按ratings大小比较 + 1;再从后向前遍历,需要一个取最大。这里用三个整形变量存储就行了,用字典是为了练习一下。

2025-03-27 11:27:37 87

原创 算法题(day28) - 跳跃游戏(1&2)& K 次取反后最大化的数组和

【代码】算法题(day28) - 跳跃游戏 &

2025-03-25 11:40:35 102

原创 算法题(day27) - 分发饼干

这一题也可以用动态规划实现。

2025-03-24 22:36:16 130

原创 算法题(day25)- 非递减子序列 & 全排列1&2

这里mp作为flag与全排列的区别在于,在函数题内部,控制了每一层同一元素只能取一次(第一次出现的那次),即如果是4,6,6,7,那么4,6只会取index为0,1的。有重复的元素,不同的元素每层中只能取一次。

2025-03-22 13:37:27 114

原创 算法题(day24) - 复原IP地址 & 子集1&2

子集和组合与分割的区别在于,组合分割是收集树上的叶子节点,而子集是收集树的所有节点。

2025-03-22 12:52:05 95

原创 算法题(day23)- 组合总和

递归调用startIndex不从i + 1开始,是从 i 开始。和组合相比,可以重复使用元素,

2025-03-20 22:09:59 136

原创 算法题(day22)- 组合

和全排列不同的是不需要用flag记录每个元素是否使用过,循环每次都从 i + 1 开始,保证每个元素不被重复组合。对于全排列来说,i每次都要从1开始,深度优先搜索。顺便附上一个全排列的逻辑。

2025-03-19 22:26:24 100

原创 算法题(day21)- 修剪二叉搜索树 & 将有序数组转换为二叉搜索树 & 把二叉搜索树转换为累加树

相当于把二叉搜索树按照递增数组的序列,从后累加。反向的中序遍历,可以让二叉搜索树成为递增数组序列,用一个值记录上一个节点的值,进行累加。

2025-03-18 17:43:45 102

原创 算法题(day20)- 二叉搜索树的最近公共祖先 & 二叉搜索树中的插入操作 & 删除二叉搜索树中的节点

删除后,若左右子树都不为空,需要将左子树,移动到右子树的最左节点下。对于普通二叉树,需要全部遍历。

2025-03-18 17:05:43 93

原创 算法题(day18)- 二叉搜索树的最小绝对差 & 二叉搜索树中的众数 & 二叉树的最近公共祖先

3. 循环逻辑:若当前匹配目标节点,返回当前节点,若目标节点分别在左右子树中,当前节点为最近公共祖先,返回当前节点。若两个目标节点都在其中一个子树中,则返回该子树的递归结果。1. 参数:当前节点,目标节点;返回值:空(以该节点为根的树中不存在目标节点),最近公共祖先。2. 结束条件:当前节点为空,或匹配目标节点时。用map记录每个元素出现的次数,排序后输出。层序遍历求最小绝对差。

2025-03-15 13:04:06 258

原创 算法题(day17) - 最大二叉树 & 合并二叉树 & 二叉搜索树中的搜索 & 验证二叉搜索树

用二叉搜索树的定义求解,会有很多特殊判定。可以用二叉搜索树的中序遍历的递增序列来判断。

2025-03-14 21:09:01 162

原创 算法题(day16)- 找树左下角的值 & 路径总和(1&2) & 从中序与后序遍历序列构造二叉树

循环逻辑:由于要找底层最左叶子节点,优先对左子树遍历,result的更新只会在第一次遇到比当前maxDepth大的值时进行,所以可以保证result的值是每层的最左节点。关键在于知道,后序数组的最后一个值是当前节点,中序数组的当前节点值的左边是左子树的中序数组,右边是右子树的中序遍历数组。结束条件:当前节点为叶子节点,更新最大深度,并且result赋值。参数:当前节点,当前深度。层序遍历,或者使用迭代。

2025-03-13 21:38:39 132

原创 算法题(day15)- 平衡二叉树 & 二叉树的所有路径 & 左叶子之和

1.明确参数与返回值,参数:当前节点,返回值:如果当前节点不平衡,返回-1,否则返回当前节点的最大高度。3. 明确函数逻辑,依次获得左右子树的高度,根据左右子树的高度差判断当前节点是否平衡。2. 结束条件,当前节点为空,或只有根节点一个节点时(没有左叶子节点),值为0;3. 单层递归逻辑,如果当前节点有左叶子节点,则赋值left。1. 参数,当前节点,从根节点到当前节点的路径,答案的集合。2. 结束条件,遍历到叶子节点,说明以及找到了一条路径。2. 明确递归结束条件,遍历到空节点时,高度为0;

2025-03-12 19:43:53 152

原创 算法题(day14)- 翻转二叉树 & 对称二叉树 & 二叉树的最大深度 & N 叉树的最大深度 & 二叉树的最小深度

【代码】算法题(day13)- 翻转二叉树 &

2025-03-11 14:10:21 174

原创 算法题(day13)- 树的前中后序遍历 & 层序遍历

迭代实现:前序遍历:读值,右子树不为空,先入栈,左子树不为空再入栈。后序遍历就是将前序遍历的答案翻转。

2025-03-10 14:25:00 213

原创 算法题(day12)- 分割等和子集

状态转移 dp[i][j] = dp[i - 1][j](取) || dp[i - 1][j - nums[i]](不取);如果 j < nums[i] 只能不取。需要提前判断,总和是否为偶数(若为奇数,int在除2时会发生不一致,并且奇数不可能被分割为两个相对的子集和),数组中的最大值是否超过总和的一半(dp会越界)。用动态规划,dp[i][j]:表示下标为前 i 个数组元素,能否表示数值 j;

2025-03-09 18:51:56 206

原创 算法题(day11)- 逆波兰表达式求值 & 滑动窗口最大值

使用map存储每个数出现的次数,赋值给vector<pair<int,int>>,用sort进行排序,sort默认对 pair.first 进行排序,所以pair.fisrt需要存频率, pair.second存数字。使用单调队列存储窗口中的最大值,单调队列由大到小排列,等值元素一起存储在队列中(等值但过期时间不同)。过期判断,当n[i - k] = q.front() 时,队头元素过期。优先队列(小顶堆)这个的使用有点没看懂。数据压栈,遇到符号进行计算。

2025-03-08 17:23:07 208

原创 算法题(day10)用栈实现队列 & 用队列实现栈 & 有效的括号 & 删除字符串中的所有相邻重复项 & 小红的数组访问

用一个队列模拟栈,栈弹出时,取队列最后一个元素,循环size() - 1次队头弹出,插入到队尾的操作,输出第一个元素。用栈存储当前字符,遇到右类型的括号,比较栈顶是否为对应左类型括号,是则抵消将左括号弹出,否则返回false。两个栈实现队列,一个输入栈,一个输出栈,当输出栈为空且需要pop时,把输入栈的所有元素存进输出栈。

2025-03-07 15:31:40 276

原创 算法题-大厂真题

首先求出,需要多少个当前字母(cnt)才能满足子串权重大于k,再拿cnt与()中取到的数进行比较,如果小于则继续遍历,如果大于,先取前cnt个字符,ans++,再判断剩余的字符数量是否满足k的条件。关键在于,遍历到满足子串权重大于k的。

2025-03-06 21:29:15 93

原创 算法题(day9)旋转图像 & 反转字符串中的单词 & 右旋字符串 & KMP & 重复的子字符串

通过翻转实现旋转,顺时针90°旋转 = 上下翻转 + 主对角线翻转,逆时针90° = 左右翻转 + 主对角线翻转。辅对角线翻转:swap(m[ i ][ j ], m[ n - j - 1 ][ n - i - 1 ])上下翻转:swap(m[ i ][ j ], m[ n - i - 1 ][ j ])左右翻转:swap(m[ i ][ j ], m[ i ][ n - j - 1 ])主对角线翻转:swap(m[ i ][ j ], m[ j ][ i ])

2025-03-05 23:32:43 204

原创 算法题(day8)反转字符串 & 替换数字

reverse 函数使用迭代器作为参数,substr的参数是 pos,len。

2025-03-05 10:41:02 115

原创 算法题(day7)四数相加2 & 赎金信 & 三数之和 & 四数之和

由于只需要返回满足条件的个数,用哈希记录前两数组各元素合的个数,遍历后两个数组,用哈希找到相加为0的个数累加。可以排序后用数据优化,需要计算出偏移量offset,将数据offset~n + offset映射到0~n。使用哈希涉及到比较复杂的去重,所以用双指针实现。和三数之和基本一致,可以通过剪枝优化。

2025-03-04 13:50:54 204

原创 算法题(day6)-哈希 - 有效的字母异位词 & 找出字符串中第一个匹配项的下标 & 两个数组的交集 & 快乐数 & 两数之和

复习了一下KMP,求ne数组:for while if =,i是被匹配字符串的指针,j是匹配字符串的指针,遍历开始时ne[0]要初始化(显然ne[0] = -1, 这里ne数组的值整体-1),从ne[1]开始求。题目给出两个字符串都由小写字母构成,所以用一个26数组维护每个字母出现的个数即可。set插入元素的方法是insert。

2025-03-03 13:58:34 204

原创 算法题(day5):螺旋矩阵

设置边界,按照方向循环遍历。

2025-03-02 18:39:55 175

原创 算法题(day4)两两交换链表中的节点&删除链表的倒数第n个节点

使用虚拟头节点可以避免对删除头节点的特判。递归思想,每次交换两个节点。

2025-03-01 14:24:07 144

原创 算法题(day3)-移除链表元素 & 设计链表

虚拟头节点记录链表的头,避免额外判断头节点被删除的情况。当前节点被删除时,p向后移动,而pre不向后移动。

2025-03-01 14:10:30 103

原创 算法题(day2)-长度最小的子数组(滑动窗口)+螺旋矩阵 II+开发商买土地

右指针移动累加,当大于等于目标时,移动左指针收缩窗口。时间复杂度为O(n)

2025-02-27 11:36:35 210

原创 算法题(day1)-二分查找

一个简单题,但是太久没刷就容易忘,通用模板,不用费劲去想+1的问题。,重新写了一下还是不太熟练。

2025-02-26 21:15:37 217

原创 算法题-MarsCode寻找最大葫芦

2.从大到小枚举出现次数大于3的牌,再从大到小枚举出现次数大于2且和当前出现次数大于3的牌相异的牌,若满足不大于max条件,直接返回。1.记录每种牌出现的次数,这里把1看作14记录,存储在count数组。用了比较暴力的方法过的,可以剪枝优化。3.对于1要特殊处理一下。

2024-12-11 22:25:52 122

空空如也

空空如也

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

TA关注的人

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