自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode 4 两个正序数组中位数,邪修二分

好的,那首先第一个问题,如何下刀,使得寻找边界能一直收缩呢,我们先将其收敛为一个二分问题:定义l和r,看mid所在的第一刀和第二刀是否满足条件,若不满足,则收窄边界,实现log时间复杂度。这么定义,我们的刀能找到m,同时能把m划到左边,同时,刀如果在0,也能把整个数组划到右边,实现完整分割。我们在两个数组分别切两刀,第一个数组切一刀,第二个数组切一刀,保证两边元素相等,或左边最多比右边多一个(如此做,当两个数组和为奇数或偶数时,我们能用一个公式表示,相当于预定义协议)。此题由于太难,直接看题解背会即可。

2026-07-12 22:36:57 254

原创 leetcode 763 未来跳跃游戏

这个题目,我们先记录一下每个字母能到的最远位置,然后遍历,记录我们必须到达的最远位置,到了后就停。和跳跃游戏不同的是,由于我们已经能预知未来,所以直接和his_mx比就行,有所不同,多做多t体会~铁律(必须严格满足):同一个字母,只能出现在同一个片段里,绝对不能跨片段。

2026-04-22 22:24:14 104

原创 leetcode 45 跳跃问题2 很难的贪心

每次到最远距离mx之前,我们会记录一个his_mx,在到达最远的mx之前,缓存可能能达到的最远距离his_mx,真的到达后再更新mx,并且ans++。这个挺难想的,下次见到结合大模型和代码再想想。做此题必须先会55跳跃游戏1,这个题目是纯粹的升级版。此题虽然是升级版,但是和1的思路差的还挺多。

2026-04-21 22:27:31 82

原创 leetcode 76 最小覆盖子串

对于第一个问题,我们可以用一个128维的数组,因为字母,数字都是ascii码,所以这样最简单最快。如果用哈希表或者树就慢了,特别是树,同一个字符要遍历好多次,才能拿到值。

2026-04-13 21:36:12 60

原创 leetcode 239 单调队列 需要一些记忆

滑动窗口最大值,刚看到,一种朴素的思想扑面而来,就是优先队列+map,是可以解决这个问题的,就是空间复杂度稍高,并且不优雅,并且 O(NlogN)一种更为优雅的做法是单调队列,这个就稍微比较考验技巧了,如果是第一次听说,最好还是全文背诵。

2026-04-09 10:18:03 53

原创 leetcode 236 二叉树最近公共祖先

但是,这个题是简单模式,保证p和q在树内。在这种情况下,我们可以直接用一种贪心的做法:如果自己是p或q,直接返回自己,如果左右子树,都返回了非空指针,那自己就是公共祖先。这种方法无法处理p和q不在树的情况,但是对这个题ok了。如果返回了最近公共祖先,那么直接返回就行。如果返回了一个p或者一个q,那么先判断自己是不是另一个,如果是的话返回自己,不是的话,也不能返回公共祖先。如果左右一个p,一个q,那么自己是公共祖先。这个题的基本思想:dfs,子树应该返回3个状态:是否包含p,是否包含q,最近公共祖先。

2026-04-08 10:45:44 35

原创 leetcode 105 前序中序构建二叉树

基本思想:我们从二叉树的前序第一个元素开始,即根节点,找到中序数组中,该节点的位置,即可划分左子树和右子树,然后在移动到第二个节点,即可递归的处理所有情况。2.处理len时,要注意边界,比较容易错。要分开处理,不然会逐渐错位。

2026-04-03 10:31:35 48

原创 leetcode 114 二叉树变链表

这个也有点贪心在,需要有点记忆,因为访问顺序是中 -> 左子树 -> 右子树,而左子树的最后一个节点是最右边那个,所以我们把右子树挂上去,这样循环往复,就可以得到链表。O(1)空间解法:把右子树挂到左子树的最右节点。第一次遍历完后,只有下一次主循环才会遇到。为什么每个节点只能访问一次?

2026-04-02 10:54:49 44

原创 leetcode 98 验证二叉搜索树(已力竭)

真正的自顶向下派活,第一次对最大值,最小值没有要求,后面的子树,根据节点的值更新最大、最小值。有不满足条件就干掉,是非常简介高效,值得学习的做法。初始想法:每个子树维护一个最大值,最小值,答案,左右树分开处理。设置一个理论上保证被更新的最大值和最小值,更新后返回,判断是否正确。这个想法比较复杂,因为需要左右子树分开判断,代码量较大,细节多。

2026-04-02 09:56:43 42

原创 leetcode 108 有序数组转平衡二叉树

这个题目的官方题解写的非常好,这个题其实是一个不断二分的过程,每次找中间节点,左边的分到左子树,右边的分到右子树,一致这样递归二分下去即可。但是如果一直是奇数节点还好说,如果出现偶数节点呢?我们应该选择左边还是右边的节点?这个题乍一看真的没什么思路,因为平衡二叉树自古以来就是老大难问题,如何建立的时候就平衡,这需要一些贪心的思想。这个就是一种贪心思想,答案是怎么选都无所谓,都可以让这棵树尽可能的平衡。

2026-04-01 10:12:28 42

原创 leetcode 148 排序链表 归并终极形态

技巧2:断链:和普通排序不同的是,由于指针随时在移动,不断链很容易出现死循环,以及无法处理的情况,因此我们要断链后,再进行子问题排序。还是熟悉的排序,只是换成了链表。要求O(NlogN)复杂度,我们采用归并排序来解决问题,保证每个子问题都是对应的线性复杂度。技巧1:每次处理子问题,遍历只有一遍,不能遍历子问题数目 * n遍,否则会超时。技巧3:细节,剩余的就是细节了,实在是太难处理,二刷再来研究吧。

2026-03-26 10:50:16 49

原创 leetcode 23合并k个有序链表

和迭代型的归并排序类似,我们需要两两合并链表,以达到O(logN)的效果。为了方便,我们每次都把结果存在左边的链表,最后返回lists[0]即可。在操作时,遵循自底向上step模板(可先学迭代版归并排序)此题操作要稍微简单些。每次队列中存储第一个元素以及索引,弹出最小元素对应位置的数组位置+1。

2026-03-24 10:51:00 63

原创 leetcode912 排序算法总结

归并排序是分治算法的一种,必须要用到额外数组,可以用一个数组代替。和回溯类似,均匀处理两边后返回,再用双指针对两边排好序的数组进行处理。核心思想有点像dp,最长上升子序列(顺便膜拜下二分做法)处理好前面后,处理当前元素,做一次遍历即可。最经典的算法,常数时间非常少,有效练手。

2026-03-19 10:37:01 192

原创 leetcode 138 复制随机链表

首先,先做原数组修改,每个节点后面加上一个复制,这样就可以用核心语句 p->next->random = p->random->next;然后就是链表分离(最恶心的一步)由于新老链表完全耦合,需要同时进行新老链表的分离操作,新链表用dummy取出,老链表用作遍历,细节比较多。这个题的难点就在于,复制时,需要找到对应的新的链表,比如10指向1,我们要和新链表的1对应上,就必须要用哈希表做记录,或者用一些手法。既然做链表题,就得要求零空间复杂度,这才是难点,但是这个算法也是真麻烦。

2026-03-17 10:46:38 49

原创 leetcode 25 k个一组反转链表,链表超好题

在宏观处理上,当处理完k个部分的反转后,我们需要把之前的部分,反转的部分,后面的部分,三个部分重新连接,所以需要类似于24题,用dummy node进行处理。这个题是 leetcode 206 反转链表 + leetcode 24 2个一组反转链表的结合。但是在反转部分,我们需要用到206题的处理方式,使用prev, curr, tmp三个节点。在细节处理上具有一定难度,需要勤加练习。

2026-03-16 10:25:16 43

原创 leetcode 84 单调栈

这个题目的核心在于,当小柱子出现时,长柱子的结果立马可以被确定,可以归类为,找右边第一个小于自己的元素,从而规约到单调栈解法。

2026-03-11 10:42:02 41

原创 leetcode 739 单调栈模板题

单调栈的主要应用场景:即找左边或右边第一个大于/小于自身的元素,可以说课这个题一模一样。栈中元素永远递减,当遇到大的,就一致排出,保持递减性。

2026-03-11 09:59:08 51

原创 leetcode 35 二分最入门

读题要考虑两种做法,用api和不用api,c++有两种api。

2025-09-23 00:14:22 244

原创 leetcode 198 打家劫舍问题,两个dp数组->一个dp数组

这里面没有考虑结尾的情况。我们可以这么想,在当前状态下,这个房子只有打或者不打两种情况,如果打,那i-1肯定是不打的,所以我们只需要考虑dp[i-2]即可。如果不打,那么考虑dp[i-1]即可,这种做法可以将结尾状态隐含表示,是更优的做法。

2025-09-19 20:52:07 308

原创 leetcode 118 杨辉三角

除此之外,每行除了第一个和最后一个元素,其他元素是等于他的 同下标,还有上个下标,类似于动态规划。我们直接学习下面的代码,写的非常好:先预分配数组空间,防止数组扩容多次增加时间(不过不是瓶颈)。类似于N皇后问题,做之前先想一下题目特性。这个每行的元素数目和行号相同,所以遍历次数是固定的。

2025-09-17 00:29:23 261

原创 leetcode 51+52 N皇后 1&2

一开始不懂解读2,是每行每列遍历,并且用的set,很慢,后面可以都优化成数组,并且每次dfs只进行一行,就很快了。解读3:我们需要枚举所有的行和所有的列,以及所有的斜线,行和列用索引即可,斜线可以用。解读1:斜线这个条件,加不加都行。不管是两个条件,还是三个条件,都是仅能放N个旗子。解读2:每行,每列均只能放一个棋子,所以我们每行放一个棋子,继续处理下一行即可。这个题目非常有意思,没做过会很头疼,需要选行、列、斜线均不交叉的N个旗子。的方式,去唯一定义。因为是一元一次函数。

2025-09-15 23:46:19 172

原创 leetcode 3504 回文+最长公共子数组

注:是否要用 # 进行额外操作?其实是不用的,因为额外考虑两个元素并列的情况,不需要花费太多代码,# 和最长后缀数组加起来,反而会有额外的边界情况,故不建议这么做。题目的拆解很重要,我们先把。反过来,即我们先要找到。最长公共子串,再找到。中结尾的最长回文串。开头的最长回文串长度。那么,我们只需要枚举。

2025-04-13 18:07:37 1104

原创 leetcode 718 最长公共子数组

其实相当于最长公共子序列的一个变种,核心代码和最长公共子序列一致。这个题目和最长公共子数组,类似于镜像题,子问题比较难想。注意,和最长公共子序列不同的是,最后一个元素如果不相同,那。结尾的最长公共子数组(公共后缀)

2025-04-13 16:42:41 375

原创 leetcode 3508 设计路由器 模拟 深拷贝 二分 bound

直接用bound的返回值去减,就可以得到元素数目,若是想得到对应的索引,则需要去减begin()的时间,所以,除了size可以深拷贝,在把较大的数据结构取出来时,一定要注意避免类似的操作。上述代码,都减去了times.begin(),其实是重复操作,用下面的代码更为简洁。的操作,但实际上,第一步取出来的时候,这一步是深拷贝,就已经花费了。在非强二分考察题目时,用bound是更为省时、简单的操作。题目比较复杂,主要体现在流程很长,就是队列加二分的操作。lower_bound:找到第一个大于等于目标数的位置。

2025-04-13 15:15:33 323

原创 acwing 2 普通背包 2维做法的坑

接下来看二维的做法,首先讲一下,为什么需要二维的做法,因为一维无法满足部分题目的条件,比如说,如果需要我们找到放进背包具体是哪几个物品,一维的是无法保存历史信息的,在这个例子下我们就需要保存二维矩阵,再进行回溯。了,我们也不能跳出循环(这个会多消耗一些时间,但影响不大)而是要把上面的结果复制下来,算是和一维最重要的区别了。这个定义非常的巧妙并且很难直接想到,因此,很多dp题目会以背包作为变种,因此,背包是dp中非常经典的例子。首先看一维的做法,如下所示,比较简单,注意细节:在内层循环中,如果。

2023-02-15 18:14:44 459

原创 leetcode 40 pair代替map做遍历 偏序回溯最重要优化点

但是这题在笔试时,包括做力扣时老是错,主要是循环内自己设置的变量总是被跳过,比如ct,这种变量一定要设置在循环开始,防止被循环中各种奇怪的continue跳过,导致没有进行迭代。先上代码,此题并不难,是一个标准的偏序回溯问题,甚至比组合总和1还简单一些。用map存一下数目即可。

2023-02-15 16:07:50 295

原创 leetcode 47 全排列,含重复元素

这个和全排列不一样的是,有重复元素,如果按全排列的做法,会把两个1计算两次,我们用一个map代替traversed数据结构,记录次数,每次–即可,思路和全排列一致。

2023-02-11 00:06:42 253

原创 leetcode 46 全排列

全排列是难一些的dfs,每个元素都要过一遍,而且要按不同顺序,复杂度相对于传统dfs更高,要额外记录一个traversed,记录走过的距离,并且需要额外的for循环,每次遍历所有数,复杂度是很高的。

2023-02-10 23:45:25 209

原创 go语言 leetcod1 两数之和

创建int,很简单,一行就行,创建map,还要make。大括号,必须不能在一起,教你做事,等号,也很奇怪。最简单的版本,直接初始化返回,不用创建map。:= 是声明变量并赋值,= 是赋值。就像这样,就可以不用给d定义了。

2022-09-11 19:07:33 258 2

原创 leetcode 182 使用having令group by少一层

但其实这一层是可以不必要的,使用having条件即可,这是专属于group by的操作,可以方便少一层select。看到此题,一瞬间就完事了啊,直接一个group by再嵌套一层完事。

2022-08-12 13:51:16 192

原创 leetcode 1407 ifnull,多条件排序

此题还是比较有意思的,如果有名字不在行驶记录中,那么他的成绩是0,也要计入表里,这里可以通过left/right join外加ifnull来实现。注意:ifnull对非null值是不做处理的,如果想对非null值也处理,可以用if函数。之后就是order by,优先级高的放前面,像group by一样。...

2022-08-11 15:27:44 228

原创 leetcode 511 日期操作

此题希望找出每个id的最小日期,如果是最小值很好操作,用min就可以了。那么最小日期其实用min也ok哈哈哈。datediff函数可以让我们得到两个日期差的日子,但min,max操作对date对象依然是成立的,很不错。...

2022-08-10 18:00:42 243

原创 leetcode 1141 少一层嵌套select

想法很简单,我们先group by,第二层用where选出count > 0并且日期符合要求的组,但其实是没有这个必要的,因为count = 0的行在group by时根本不会被提取出来。所以可以用下面的单层嵌套解决。重命名可以不用as,直接命就行,nice。选出30天,每天的活跃用户数目。解法二:单层select。...

2022-08-09 14:31:05 209

原创 leetcode 197 cross join和自交

此题需要两两比较找到每两个日期差为一的对,因此我们要使用cross join来操作,并且需要自交,这里要用到别名方法,特别简单,select时写一下就行。此外,datediff这个函数可以帮忙判断日期差,很舒服。......

2022-08-09 13:36:22 149

原创 leetcode 176 子查询,ifnull,limit,offset

当提取的是一个数字时,我们就可以将其作为一个属性常量。在此题中我们也可以利用这个特性,首先抽取出这个常量,如果是null也可以提取出,然后将他作为常量拿出即可。首先讲讲ifnull函数,这个函数和if不太一样,if可以用于属性值不同case的多路选择,但ifnull的输入一般是一个值(?首先介绍一下子查询的概念,最常见的就是list提取,我们也经常用的。subquery提取的可以是一个列表,一张表,或者是一个数字。和上面的代码对比,我们只是加了一个函数,并且完全是多余的。解法二:ifnull。...

2022-08-08 17:39:30 1467

原创 leetcode 608 选取list时记得去null

这个题目还是比较典型的,在提取list时记得要把null排除掉,不然用in操作时会出现bug。

2022-08-01 20:33:00 134

原创 leetcode 1795 sql表的拆分,行转列

然后离谱的事就发生了,tm的就不对啊。然后我就研究了一会,发现原来sql是不能!=null的,一定要isnotnull才行。此题一眼看去完全不会,经题解指点,发现可以讲常数值直接定位列的值,结合union可以非常巧妙额解决,于是我就画了个葫芦。...

2022-08-01 20:21:07 277

原创 leetcode1965 表的属性融合 选取list

事实上我们无法合并属性,但可以通过表的union进行合并。并且可以通过select获取list进行in的操作,还是很妙的。正常我们可以通过fulljoin把两个表连接起来,但是需要把两个表的雇员id属性给合并,这一步不太会做。...

2022-08-01 20:06:39 188

原创 leetcode 1527 sql 正则、通配符匹配

正则的规则更为复杂,有时可以处理更为复杂的情况。其中,匹配空白字符可以用\s,因为\s是空格,^代表字符串开始位置。此题需要再conditions字符串中找到满足条件的子串。用算法做的话都很麻烦,但是正则和通配符就非常方便。上述方法是错误的,因为可能会匹配到ADIAB1这类字符串,所以可以把第一个单独考虑,即。通配符的方法很简单,使用like,用%代替其余字符即可。......

2022-07-31 13:09:45 577

原创 leetcode 1484 group by collect_list替代

我们可以使用group_concat函数将商品列表变成字符串,还是挺简单的。但这样无法提出商品列表,只能提取一个商品。

2022-07-26 15:23:07 278

空空如也

空空如也

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

TA关注的人

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