自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 146. LRU 缓存

此题需要先了解,LRU的实现原理,即当缓存池已满时,淘汰最近最久未使用的元素,并将新元素加入到缓存。unordered_map+list 实现。

2023-05-22 11:56:14 113

原创 300. 最长递增子序列

dp公式: dp[i] = max(dp[i],dp[j]+1);dp[j]为j<i且nums[j]<nums[i]的元素。dp数组:记录以第i个元素为结尾的子数组的长度。

2023-05-13 11:53:35 120

原创 239. 滑动窗口最大值

(1) 出列,如果对头元素为当前元素则出列(目的是配合窗口的长度,如果队列中的长度超过了窗口的长度,则表名对头元素为窗口外的元素,需要出列)(2) 入列,入列时首先应该将小于该元素的队尾元素全部去除,如果队尾中含有一个小于该元素的元素,则队列不再单调。(3) 获取队列中的最大,最小值:该题获取最大值,由于单调递减,直接返回对头元素即可。本题的目的是实现一个单调队列,递减或递增,该题为递减。

2023-05-08 11:26:01 115

原创 238. 除自身以外数组的乘积

(2)如果数组中含有一个0,那么结果集中除了当前位置,其余位置都为0,我们只需判断当前位置是否为0,不为零将s给它,否则就给0。除自身之外的乘积,即可以将数组内所有元素相乘得到s,然后遍历到当前元素时,使用所有元素的乘积s/当前元素即可。(1)如果数组中含有两个0,那么整个结果集必然为0,因为你无论撇弃那个元素最终的乘积都为0。(3)如果数组中没有0,那么我们只需进行赋值nums[i] = s/nums[i]即可。1. 首先获得数组中所有元素的乘积s,并记录数组中0的个数。(4)最后返回nums[i]

2023-05-08 10:20:35 102

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

(1)当前节点恰好的最近祖先,将当前节点给与最终结果,并且将返回值置空,以免出现再次赋值的情况(恰好两个节点分别在左右子树上)(2) 当前节点为pq中的其中一个,并且另一个在当前节点的左右子树上,那么返回当前节点,并将返回值置空。(3)当前节点为第一次遇到pq中的一个,返回true,表示当前子树中含有一个节点。2. 如果当前节点不为空那么进入它的左右子树查看,是否含有需要查找的节点pq。3. 左右子树皆遍历完毕,现在先查当前节点是否为公共祖先,分为下面四种情况。1. 退出条件,当前节点为空。

2023-05-07 18:37:43 73

原创 234. 回文链表

2. 从中间节点进行反转链表(对链表进行头插法)将链表的节点值存在数组里,判断是否回文。1. 使用双指针找到链表的中间节点。方法二: 双指针+反转链表。

2023-05-06 13:40:28 47

原创 226. 翻转二叉树

2. 如果当前树不为空则交换左右子树,然后在让其左右子树进入交换函数(递归),直至遇到条件1为止。思路:和值交换的思路相似,将其左右子树对调即可。1. 如果当前树为空则退出递归。

2023-05-06 11:02:01 47

原创 1324. 竖直打印单词

按行组成字符串,然后从字符串后面逐个去除空格,将最后剩余的非空字符串,加入到结果集中。2. 如果当前字符为空,更换列,行数置为1,将所有字符取出后,再按行进行拼接。1. 如果该字符不为空则将字符在当前加入当前列,行数++从字符串中去非空字符,将其放入到一个二维数组中。

2023-05-06 10:55:18 64

原创 221. 最大正方形

2. 如果当前位置元素为1,则应该取,左,上,左上三个点的最小边长加1。1. 如果该当前位置元素为0,则边长为0。dp数组记录以i,j为右下角的最小边长。

2023-05-05 13:04:20 64

原创 208. 实现 Trie (前缀树)

(2)如果遍历到单词结尾的字母,存在于子结点中并且该子节点的wordend=true表名该单词在树中,返回true,其他情况皆为false。主要包含三个部分,当前节点表示的字母,当前节点是否是单词结尾,以及指向子节点的指针,26个代表每个字母后面可以接任意字母。(1)如果当前字母在子结点中,那么进入子节点,如果不在子结点中(子节点为NULL)那么没有该单词,返回false。(2)如果当前字母不再子节点中,那么新建子节点,并将该字母传入给子节点,并进入子节点。对查询单词循环遍历,挨个查询单词中的字母。

2023-05-05 11:22:55 497

原创 310. 最小高度树

思路:如果要想找最小高度的树,那么只需要找到最里层的所有节点即可(最长的树,是从叶子节点到叶子节点,而最短的树则是从最里层的节点到叶子节点)(2)检查取出当前边后,与该节点相连的边的度是否为1,如果为1加入队列。(1)从队列中取出一个节点,将与该节点相连的边(度)都去掉。1. 寻找度为1的所有节点加入队列(无向图只考虑度即可)2, 循环遍历队列,直至队列为空时,即认为遍历结束。(3) 将从队列中取出的节点放入结果集。3. 返回当前结果集。

2023-05-03 11:24:42 56

原创 1003. 检查替换后的词是否有效

思路: 遇到a,b入栈,遇到c出栈即可。

2023-05-03 09:50:04 50

原创 210. 课程表 II

3. 当队列为空时,即找不到一个入度为0的点时,退出循环,如果数组中所有点的入度都为0说明能顺利学习,否则不行,返回结果。2. 寻找入度为0的点,然后去掉所有以该顶点为入度的点的入度,循环执行此步骤。拓扑排序:检查图中是否有环,没有环返回排序后的结果,有环返回空数组。1. 先记录每个顶点的入度。

2023-04-30 11:28:45 52

原创 207. 课程表

3. 查看删除这条边后,以这条边为入度的顶点的入度是否为0,如果为0加入队列。该题是典型的拓扑排序题,只需要检测是否存在环即可,如果不存在返回true,如果存在返回false。2. 取出队列中的一个顶点,将以该顶点为出度的边删除。如果所有顶点的入度都为0那么说明没有环,如果存在入度不为0的点,那么说明存在环。4. 如果队不为空,循环遍历1-3。拓扑排序:1. 所有入度为0的顶点加入队列。广度优先遍历+拓扑排序--检测是否存在环。

2023-04-26 12:24:21 43

原创 1163. 按字典序排在最后的子串

非暴力求解:我们在比较时标记好最后比较的位置,那么我们在比较到不相等的字符的时候,在不替换的情况下,我们下次比较是从上一次比较的前一个位置开始。1. 我们寻找的是开头字符最大的一个,如果开头字符相等那么就需要逐个比较接下来的字符,如果相等,直到不相等或者到串尾为止,比较看步骤2。(4)如果到结尾仍未找出不同的字符,则返回false不进行替换,并且比较结束,已找到最大的子串。(2)如果现有子串大,那么返回false,不再进行比较,false表示不进行替换。(3)如果新的子串大,返回true,替换掉现有子串。

2023-04-24 11:01:15 89

原创 [129] 求根节点到叶节点数字之和

深度优先遍历,数的先序遍历。

2023-04-23 14:03:59 53

原创 200. 岛屿数量

只需要挨个遍历每个点,当且仅该点为‘1’且未被访问时,深度访问该点并将岛屿的数量+1,并且深度遍历与该点"陆地"相连接的所有点(陆地)深度优先遍历与广度优先遍历都可。

2023-04-23 13:53:57 63

原创 1027. 最长等差数列

动态规划:dp数组中记录的是,等差数列的长度,即当前位置与当前位置之前的所有位置的差的等差数列长度。我们遍历当前位置,以及当前位置之前所有位置的差,和此差的长度,当前位置在之前遍历的位置上+1;所以在定义dp数组时,应该将所有长度都置为1;

2023-04-22 11:05:13 57

原创 130. 被围绕的区域

需要辅助数组 vector sample(m,vector(n,1));值为0时标记为不可变。1. 遍历四个边界遇到‘O’将其标记为不可变,并且向四周延申,将与'O'相邻且未标记为不可变(0)的元素皆标记为不可变(0)分析:只要与边界接触且值为'o'的相邻的'o'区域都为不可变,其他的都为可变,所以只需要遍历四个边界即可。深度优先遍历 DFS;

2023-04-21 12:01:15 45

原创 116. 填充每个节点的下一个右侧节点指针

2. 当current!=0时在当前层内,next指向队列的下一个节点,当count==0时当前层遍历结束,next指向NULL。1. 在层序遍历的基础上添加两个变量,1)current用于标记当前层的节点树 2)count用于统计下一层的节点数。

2023-04-21 10:05:09 44

原创 646. 最长数对链

2. 选择比上一个结束位置更大的起始位置,则进入下一个选择,令结束位置为当前结束位置。先按照第二位置的最小值进行排序,如果第二个位置相同,那么选择第一个位置最小的值排序。1. 优先选择第一个元素作为链的第一个元素。

2023-04-19 11:40:12 32

原创 1043. 分隔数组以得到最大和

2. 从第k+1项开始,若想在第i项取得最大值,那么需要求得dp[i-k]+子数组i-k+1到第i项的值与,dp[i-k+1]子数组到i-k+2到第i项的值......与dp[i-1]+第i项中的最大值。3. dp递推公式为: dp[i] = max(dp[i], max(i-n));1. 首先确定dp数组前k项的值。

2023-04-19 10:31:16 83

原创 611. 有效三角形的个数

2. 固定第三条边,寻找所有满足条件的前两条边,这两条边,定义两个指针left与right,由于数组是有序的,如果满足nums[left]+nums[right]>nums[i] ,则left 与 right之间的所有边皆满足,即right不变的情况下,left递增。我们要考虑到所有情况,所以在满足上述条件之后令right--,以使找到所有可能的结果。贪心+双指针: 如果是有效的三角形则,两边之和大于第三边。1. 由于不要求数组有序,优先排序。

2023-04-17 14:22:20 35

原创 581. 最短无序连续子数组

3. 调整子数组边界,子数组左侧比子数组中最小值大的值都需要参与排序,子数组右侧比子数组中最大值小的值都需要参与排序。1. 确定可能需要排序的子数组,该子数组左侧为递增序列,右侧也为递增序列。2. 从子数组中取出最大最小值。

2023-04-15 20:56:44 33

原创 452. 用最少数量的箭引爆气球

2.先根据第一个区间设定可引爆区间的限制的范围,当遇到下一个气球时,判断该气球是否与前面的气球有交集,如果有则将可引爆区间设为当前可引爆与当前区间的交集作为新的可引爆区间的新范围 ,如果没有交集则需要重新发射一支箭,并将新的气球范围设置为可引爆区间。贪心:每加入一个气球取其最小区间作为引爆区间。1.先按照区间的左边界进行由小到大排序。

2023-04-15 18:19:50 37

原创 435. 无重叠区间

1. 先对数组按照区间右边界进行排序,我们要保证删除更少的区间就等于我们要保留更多的区间,如何保留更多呢?那我们只需要在保留第i个区间时第i个区间的右边界尽可能的小即可,右边界越小可跟随在后面的区间就越多。2.在排序之后我们只需要判断需要保留的右边界以及下一个需要保留的左边界即可。

2023-04-15 17:37:31 40

原创 334. 递增的三元子序列

我们用两个值记录前两个,为left 和mid,遍历数组始终保持leftmid则return true,起始令left = nums[0],mid = INT_MAX;2. 如果nums[i]>left&&nums[i]

2023-04-14 12:14:33 44

原创 1023. 驼峰式匹配

3. 如果以上两个条件皆不满足且pattern内所有字母匹配完毕,那么需要查看未匹配完的字符串中是否还有大写字母,如果有则设为false。2. 当前pattern为大写字母时,需要查看大写字母是否是当前大写字母,如果不是则不再继续匹配该项设为false。1. 当前pattern为小写字母时,碰到大写字母则不满足,不再继续匹配该项设为false。4. 如果以上三种情况皆满足的情况下设为true,否则为false。如果匹配则需要排除以下几种情况。

2023-04-14 11:17:48 42

原创 135. 分发糖果

2.从后向前遍历,看左侧是否大于右侧并且左侧的糖果量小于等于右侧,如果是,则在右侧的基础上+1。1. 从前向后遍历,看右侧是否大于左侧,如果是,则在左侧的基础上+1。两次贪心 :不能左右兼顾,优先处理一边再处理另一边。

2023-04-12 18:51:04 33

原创 1005. K 次取反后最大化的数组和

1. 把负数取反(1.负数的数量小于k,那么每次都按绝对值的最大值进行取反---排序后则是遇到负数即取反 2.输出的数量大于k,则将所有的负数取反后,跳入第二步)解法一:每次都取数组中的最小值进行取反(使用小根堆)2. 再把正数中最小的取反(次数为k-负数的个数)先把数组按绝对值由打到小进行排序。

2023-04-12 16:02:35 49

原创 316. 去除重复字母

2.如果栈不为空时:栈中是否有该元素,如果有则不入栈,如果没有则查看该元素与栈顶元素的大小,如果大于栈顶元素,则入栈,如果小于栈顶元素,则循环判断(后续是否该有栈顶元素,如果有则出栈)贪心:每次栈中总是以最小的字母在前,大的字母在后,如果不满足的出栈调整。

2023-04-12 10:43:31 51

原创 113. 路径总和 II

1.退出条件,节点为空或者为叶子节点时,当为叶子节点时判断当前路径的和是否和目标相同,相同则把路径加入结果集。5.左右子树查看完毕,弹出当前节点,以该节点为根的树遍历完毕。2.当条件1不满足时,将当前节点加入到path中。深度优先遍历 -- 这里有用到回溯的思想。3.左子树不为空进入左子树查看。4.右子树不为空进入右子树查看。

2023-04-09 12:18:09 43

原创 98. 验证二叉搜索树

1.左子树所有节点小于当前节点,右子树的所有节点大于当前节点。满足三个条件则认为当前树为一个二叉搜索树。递归验证二叉搜索树只需要满足三个条件。2.左子树为一个二叉搜索树。3.右子树为一个二叉搜索树。

2023-04-09 11:31:07 38

原创 114. 二叉树展开为链表

114. 二叉树展开为链表

2023-03-23 22:42:53 244

原创 1630. 等差子数组

1630. 等差子数组

2023-03-23 20:05:58 40

原创 剑指 Offer II 090. 环形房屋偷盗

剑指 Offer II 090. 环形房屋偷盗

2023-03-21 12:04:30 95

原创 剑指 Offer II 089. 房屋偷盗

剑指 Offer II 089. 房屋偷盗

2023-03-21 11:39:35 53

原创 剑指 Offer II 057. 值和下标之差都在给定的范围内

剑指 Offer II 057. 值和下标之差都在给定的范围内

2023-03-21 11:22:33 68

原创 剑指 Offer II 054. 所有大于等于节点的值之和

剑指 Offer II 054. 所有大于等于节点的值之和

2023-03-17 16:33:55 57

原创 剑指 Offer II 050. 向下的路径节点之和

剑指 Offer II 050. 向下的路径节点之和

2023-03-17 15:52:40 49

空空如也

空空如也

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

TA关注的人

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