自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode hot100 链表(二)

哈希映射法建立新链表结点与原节点的映射关系。利用小根堆实现,小根堆里维护每个非空链表。和上题使用了相同的命名体系。类似归并排序方法,先。

2025-06-03 12:12:18 703

原创 leetcode hot100 链表(一)

开一个数组把链表里的值全部push_back进去,然后按判断回文数组方式判断。如果有环,则快慢指针一定会在环内相遇,类似跑步快的人会套圈跑步慢的人。

2025-06-03 11:55:16 443

原创 leetcode hot100 二叉树(二)

本文总结了几种常见的二叉树算法,这些算法均采用递归/迭代遍历,通过特定条件处理解决不同二叉树问题。

2025-06-02 14:04:52 826

原创 leetcode hot100 二叉树(一)

中序遍历(中根遍历):左-根-右顺序,递归实现。注意设置递归终止条件。

2025-06-01 17:14:41 551

原创 leetcode hot100 技巧

因为众数被选中的概率大于50%,所以时间复杂度虽然理论上可能出现O(∞)的情况,但实际上可以达到O(n)。利用异或运算相同得0的特点。所有出现过两次的数字都会在异或运算累加过程中被抵消。之后的部分使其升序,这样这部分最小,确保了整个排列是“下一个”排列。①两个同向指针分别记录0的交换位置和1的交换位置。②左右指针分别记录0的交换位置和2的交换位置。经典的“荷兰国旗”问题。是第一个破坏从后向前升序的位置,这意味着。将数组视为链表,并利用快慢指针检测环。可以增大以得到更大的排列。之后的部分仍然降序。

2025-05-07 19:25:24 1143

原创 leetcode hot100 多维动态规划

如有缺漏谬误,还请批评指正。

2025-05-06 11:09:38 730

原创 leetcode hot100 动态规划(二)

(1)状态表示:f[]记录到字符串s的位置i为止,能不能用wordDict里的单词凑出来。是否正好匹配字典中的某个单词word,如果可以,则f[i]=true。个字符可以在wordDict中找到匹配的前提下,子串。模板题,每遇到一个满足递增性质的数就更新一遍答案。②栈非空,说明当前匹配长度还未达到最大值,更新。引入栈stk记录索引,将左边界-1入栈。①栈空了,说明当前括号已经全部匹配,本题可以用栈做,思路更简单清晰。(2)遇到右括号:栈顶元素出栈。(1)遇到左括号:入栈。0-1背包问题变形。

2025-05-05 13:17:56 864

原创 leetcode hot100 动态规划(一)

(1)取:f[i-2]+nums[i-1](i-1是下标偏移)两种方案:爬1级台阶到当前楼梯或爬2级台阶到当前楼梯。后,剩余的金额是 i-coins[j]如果 (i-coins[j])>=0。如有缺漏谬误,还请批评指正。(2)不取:继承f[i-1]也是完全背包问题变形。0-1背包问题变形。

2025-05-04 10:52:28 579

原创 leetcode hot100 贪心

引入变量maxv记录当前节点所能跳到的最远距离,每次跳跃时更新最远距离,最终如果最远距离超过终点,说明可达,返回true。否则返回false。本质上是区间合并问题:有重叠的区间需要进行合并,最后留下的区间是不重叠的独立子区间。(2)合并重叠区间,最后不重叠区间就是答案。为了让跳数最少,在不得不跳时才会跳一次。低价买入,高价卖出,贪心寻找最优解。(1)每个字符对应一个区间。

2025-05-03 14:00:36 640

原创 leetcode hot100 堆

(1)堆里已有k个元素:比较当前元素和堆顶元素(堆中元素的最小值),若当前元素大于堆顶元素,则弹出堆顶元素,并把当前元素放入堆中。①如果queMin为空,或num<=queMin的堆顶(小于等于较小一半数字的最大值),则加入queMin。(1)如果 queMin 的大小 > queMax 的大小(总数为奇数):中位数就是 queMin 的堆顶。(2)找第k大的元素:从堆尾元素开始一个个弹出并调整堆,弹出k-1次后,堆顶元素就是第k大的元素。(2)堆里元素还不满k个:直接把当前元素放入堆中。

2025-05-02 17:08:36 794

原创 leetcode hot100 栈

(2)遇到右括号:如果栈顶元素非空且两括号匹配,则弹出栈顶元素。否则返回false,匹配失败。单调栈:当前温度>栈顶温度时,说明找到了大于栈顶温度的第一个数,此时记录索引。当遇到比栈顶柱子矮的柱子时,说明找到了以栈顶柱子为高的矩形的。(2)遇到左括号:为之后遇到右括号的拼接做准备。,此时可以计算以栈顶柱子为高的最大矩形面积。(4)遇到字母:res后面追加字符。(3)遇到右括号:进行拼接操作。(1)遇到左括号:左括号入栈。(1)遇到数字:更新num。,并保证栈中的柱子高度。

2025-05-01 10:54:10 564

原创 leetcode hot100 二分

怎么判断有序:和nums[0]比较,如果nums[mid]>nums[0]说明[0,mid]这部分有序。(1)如果二分出的rl是第0行,且rl[0][0]还是大于target,说明无解,返回false。(2)如果二分出的rl超出索引范围,回退到上一行(答案可能在最后一行的某一列)是否存在)的模板略有不同,核心区别在于 终止条件和更新方式。采用二分插入模板,进行两次二分,第一次二分行,第二次二分列。是二分查找的灵活运用,核心思想是二分查找有序部分。模板,先二分查找左边界,再二分查找右边界。

2025-04-30 20:52:33 509

原创 leetcode hot100 回溯(二)

如有缺漏谬误,还请批评指正。

2025-04-29 10:12:14 416

原创 leetcode hot100 回溯(一)

回溯常用于dfs递归结构。递归需要特别注意递归终止条件,另需要注意递归的循环起始点,两种循环起始点比较如下图所示。

2025-04-28 19:21:48 336

原创 leetcode hot100 图论

为判断是否所有橘子都会腐烂,需引入fresh变量记录剩余新鲜橘子数。如果所有腐烂橘子都扩散完了,而新鲜橘子还有剩余,则应判断为无解,输出-1。不能挨个遍历橘子,而应该“批量”遍历,每次把当前时间所有腐烂的橘子加入队列,当这一层所有橘子都遍历扩散完毕后时间变量time才能+1。主函数中对图进行遍历,遍历到陆地则岛屿计数+1,并通过bfs把所有连通的地块都标记成‘0’。Trie树又称字典树,利用字符串前缀简化查找步骤。图遍历完毕后岛屿个数就统计出来了。

2025-04-28 11:40:18 493

原创 leetcode hot100 矩阵

思路:引入标记数组row[]和col[],当遍历到matrix[i][j]==0时,同时将row[i]和col[j]打上标记。最后遍历一遍matrix,如果matrix[i][j]所在行或列有标记,则修改其值为0。类似“蛇形填数”,引入left, right, top, bottom四个边界变量,每次遍历之后修改边界变量的值,以控制遍历按照规定顺序且不重不漏。从右上角看,该二维矩阵满足二叉搜索树性质,可以按照查找二叉搜索树的方式搜索该矩阵。思路:先转置矩阵,然后每行逆置。

2025-04-27 14:36:13 334

原创 leetcode hot100 普通数组

优化求解,注意先更新res[i]再更新lsum或rsum,以避免将自身乘进去。(1)利用抽屉原理,空间复杂度O(n)。(2)无重叠:说明上一个区间是独立区间,push_back进答案中。(1)有重叠:说明上一个区间和当前区间有重叠,需要更新左右端点。举例如下:假设有数组[1,2,3,4,5,6,7]。(2)原地哈希,负数处理掉,用来标记正数位置。贪心算法,用st和ed维护区间的左右端点。(2)解法二:三次reverse。(2)优化:结合01背包思想。(1)解法一:开一个新数组。(1)超时做法:前缀和。

2025-04-26 11:02:37 646

原创 leetcode hot100 子串

如有谬误,还请大家批评指正。

2025-04-25 15:43:31 602

原创 leetcode hot100 滑动窗口

(3)如果窗口内的字符频率与模式串字符频率相同,说明找到一个异位词,其索引存入res中。(2)遍历主串,维护一个滑动窗口,长度为模式串长,超过滑动窗口范围的字符全部删除。思想:维护一个滑动窗口(右边界扩展,左边界收缩),保证其中无重复字符。(2)根据“下一个字符是否和窗口内已有字符重复”分类讨论。考虑优化:维护一个滑动窗口,统计字符出现频率,步骤如下。②有重复:左边界右移到重复字符的右侧,然后更新右边界。(1)初始化模式串数组,统计模式串字符频率。(3)更新答案,取窗口最大值。①无重复:更新右边界。

2025-04-24 11:04:49 453

原创 leetcode hot100 双指针

思想:先对数组排序,然后固定一个数nums[i],并在[i+1,n-1]区间遍历另外两个数nums[l]和nums[r]。引入idx记录,在遍历整理数组的同时,更新非零元素索引,然后把剩下的空位(idx~n之间)全部填补成0。两个柱子之间能盛多少水取决于高度更短的那一方(min(height[i],height[j]))。细节处理:当找到一组答案后,l后移,r前移,由于答案不可以包含重复的三元组,所以需要跳过重复元素。核心:还是木桶效应,每次依据“短板”更新储水量,是第二题的进阶版。

2025-04-23 17:07:03 573

原创 leetcode hot100 哈希表

建哈希表存储每一个数(key)和对应的索引值(value),对于每一个数nums[i],寻找是否有对应的“另一半”——target-nums[i]。考虑建立哈希表存储索引(sort后的key)和值(原始字符串),最后按索引分组记录答案。暴力枚举数i和数j,判断i+j是否等于target,时间复杂度O(n²)。(2)后一个数不等于前1个数,即后一个数比前一个数至少大2:更新maxv,len重置。否则先把nums[i]的索引i暂存进哈希表中,进行下一轮循环。(1)后一个数比前一个数大1,即满足条件:len++

2025-04-22 17:20:51 653

空空如也

空空如也

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

TA关注的人

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