- 博客(104)
- 收藏
- 关注
原创 力扣面试150题--三角形最小路径和 最小路径和 不同路径 最长回文子串
【代码】力扣面试150题--三角形最小路径和 最小路径和 不同路径 最长回文子串。
2025-08-13 17:44:21
76
原创 力扣面试150题--阶乘后的零,Pow(x,n)直线上最多的点
对于乘法出现低位0,只有可能由以下可能基于以上这两点,我们可以找到一个共同特征,但是这里又出现一个问题:254可以得到2个0,252只能得到一个0,我们需要统一,不然还是无法统计,但是我们直到25可以表示为5*5,对这样我们就只统计5的个数。
2025-08-11 17:55:58
464
原创 力扣面试150题--加一
其实对于这道题,需要考虑的点是低位中出现9的位置,出现9就加1进位,如果下一位不是9就加1即可,唯一要注意的就是9出现在最高位需要进位的情况,就单独拿一个扩大的数组来存就行。
2025-08-04 17:41:09
132
原创 力扣面试150题--只出现一次的数字II
具体是这样的:由于除了答案外每个数字都会出现3次,那么我们不考虑答案的情况,那么一个二进制位的可能为0或者1,:想不出来 哈哈哈指挥hash 就不放出来丢人了。:这个做法是每次确定一个位是否为答案为1 的位。
2025-07-31 11:29:38
240
原创 力扣面试150题--位1的个数
逐步检查每个位是否为1 取32因为整型二进制最大长度为32。不断循环就会使最低位1变为0,同时被记录。:采取二进制的性质来做。(n-1)&n的效果,:想不到,但是很优秀。对于一个二进制数执行。
2025-07-29 17:32:06
209
原创 力扣面试150题--颠倒二进制位
二进制的算法,将十进制转化为二进制,有一点需要注意,直接采取库函数转化为二进制再反转会出现问题(这也是为什么我要补0的原因),因为转化过去不满足32位的二进制,前面不会当作无符号而是当作有符号数,顶位会当作符号位自动补,导致反转得到的值不对。
2025-07-28 17:52:37
162
原创 力扣面试150题--二进制求和
复习一下二进制加法,利用jin来记录是否有进位,先对两个字符串进行相加,直到一个字符串加完了,单独处理剩下的那个字符串。
2025-07-27 17:36:06
252
原创 力扣面试150题--寻找两个正序数组的中位数
比较nums1[1] = 3和nums2[1] = 4,因为 3 < 4,排除nums1的前 2 个元素,更新:index1=2, k=2。比较nums1[2] = 5和nums2[1] = 4,因为 5 > 4,排除nums2的前 2 个元素,更新:index2=2, k=1。假设nums1 = [1, 3, 5],nums2 = [2, 4, 6, 8],总长度为 7(奇数),中位数是第 4 小的元素。k=1,返回min(nums1[2], nums2[2]) = min(5, 6) = 5。
2025-07-26 17:02:16
246
原创 力扣面试150题--寻找旋转排序数组中的最小值
此时我们到了第二段有序的数列,但可能mid和beg是处于第二段有序数列的中间,我们判断这个mid是否是周围的最小值,如果不是,那么我们需要beg和mid向前移动,于是beg–,end=mid。那么我们就开始二分查找,此时数组是由两段有序数列组成的,前一段我们肯定找不到最小的值,,我们就得让他向前走,所以beg=mid+1,让他快速的进入第二段有序数列中去。此时由于我们要比较mid左右的值,防止越界 特判一下第一个元素和最后一个元素。
2025-07-25 21:31:32
217
原创 力扣面试150题--在排序数组中查找元素的第一个和最后一个位置
说明目标值可能在当前位置或左侧,移动右指针 right = mid - 1。,说明目标值可能在当前位置或右侧,移动左指针 left = mid + 1。,说明目标值在左侧,移动右指针 right = mid - 1。,说明目标值在右侧,移动左指针 left = mid + 1。,确定是否找到目标值。,确定是否找到目标值。
2025-07-24 21:23:37
178
原创 力扣面试150题--搜索二维矩阵
首先将确定要查询的数位于哪一行,由于二维数组是有序的,就比较每行的第一个元素和最后一个元素,这里直接相等就返回。最后,锁定到某一行后,就采取二分查找,找到就返回true 没找到就到终止条件,跳出循环返回false。此题其实就是二分搜索的变形,
2025-07-21 17:41:00
191
原创 力扣面试150题--最大子数组和
比较简单,我们从左向右遍历一次,记录当前元素的前一个元素之前的最大子序列和leftbe和目前已遍历元素的最大子序列和leftmax,首先获取新的leftbe,即取max(leftbe+当前元素,当前元素)判断更新后的leftbe是否大于leftmax,大于就更新。最后返回leftmax。
2025-07-18 10:05:30
222
原创 力扣面试150题--合并K个升序链表
这题显然是一个分治合并的算法,我们将数组中的链表两两配对,合并。:每次取出所有链表中的最小值,插入结果链表中,返回头节点即可。首先分治的做法,不断进行二分,直到每个段只有1个或0个链表。:时间复杂较高并且还需要额外开辟一个链表存放结果。递归合并右半部分lists[mid+1…递归合并左半部分lists[l…最后合并两个有序链表。
2025-07-17 09:51:08
279
原创 力扣面试150题--建立四叉树
*如果数组中所有元素都是1或者0,说明这就是个叶子节点,**它的值为1或者0(看数组中的值,记得转化为boolean)我们需要的参数有二维数组(grid),左上第一个元素的坐标(x,y),这个快数组的长宽(size)那么如果不是叶子节点,那么就得分为四块,这不就是递归关系,因此有以下代码。这题的意思是:一个n*n的二维数组,n取的都是2的次方(方便分块)接下来,我们来考虑,这肯定是一个递归的关系,那么首先思考。,那就继续分块,最终分为所有元素相同的数组或者就一块。对我而言,简单的事情是,我们。
2025-07-16 10:02:41
278
原创 力扣面试150题--排序链表
分析一下,还是选择排序太慢了 O(n方),所以还是得从那几个O(nlogn)的算法入手。:我们可以采取归并排序的方式来解决这个问题。
2025-07-15 15:56:31
222
原创 力扣面试150题--将有序数组转化为二叉搜索树
由于给出的是一个有序的递减数组,因此组成选取任意一个节点作为根节点都是一个二叉搜索树,那么如何保证搜索树两边平衡呢?选取中间的节点作为根节点即可,于是采取递归不断选取中间节点作为父节点即可。
2025-07-14 09:11:33
226
原创 力扣面试150题--括号生成
第二部分式常见题 这里不赘述了,以下说明如何获取不重复的括号组合。:提交后发现时间复杂度很高 ,就去翻题解了。第一个部分,获取不重复的括号组合。第二个部分,判断这个组合是否合法。
2025-07-12 10:58:02
219
原创 力扣面试150题--组合总和
这里在上面代码的基础上进行修改,出现重复的原因在于,由于本题不限制元素使用次数,并且元素不重复,因此在我们首次进入递归循环一次时,就获取了第一个元素所有组合总和的情况了。首先是终止条件,当我们获取到的总和值大于等于target的时候就可以终止了(由于限制了元素值都是正整数),这里只有等于target才将其加入到结果集。同理我们聚焦到最高层递归的第二个循环,这里回溯还回到第一个元素,那就会出现重复的情况。其次进入循环,这里回溯前后,有两步要做,第一步添加元素到临时集,第二步总和值增加。进入主要的函数代码,
2025-07-11 09:27:26
184
原创 力扣面试150题--全排列
我们聚焦到数组的序号first,我们需要不重复的往这个first填数(并且不重复,考虑从左往右依次填入值),抽象到图里的意思是该空格的元素,依次和空格后的元素交换次序(还有一个不交换的情况)。首先我们需要确定back函数的参数,res和te肯定需要,我们需要得到空格的位置吧 x,我们需要知道数组的长度吧 n。对于te我们需要提前往里面填入nums的值,因为我们需要不停交换嘛。最后看,循环条件,我们需要从空格位置和其后每个元素交换位置,操作就很明显了就是交换,撤销就是换回来就行,back()移动空格处理。
2025-07-10 20:40:46
261
原创 力扣面试150题--添加与搜索单词 - 数据结构设计
遍历当前节点的所有非空子节点,对每个子节点递归调用 find 函数,处理剩余字符(start + 1)。如果所有子节点都无法匹配,返回 false。只要找到一条有效路径,立即返回 true。
2025-06-14 12:58:28
273
原创 力扣面试150题--实现Trie(前缀树)
前缀树的作用在于快速检索字符串的前缀,插入一个字符串,即为从根一次插入孩子节点,将字符串最后一个字符对应的节点标记结束节点,再插入另外一个相同前缀但最后n个字符不一样的字符串,那么在相同前缀的部分,不需要插入新的节点,直到第一个不同的字符,添加一个新的子节点。这样做的好处,我们如果要获取两个字符串的前缀,只需要从根节点向下遍历,比较两个字符串,只要到某个节点出现了分支,则这个节点之前的节点就是两个字符的公共前缀。:此时还不了解什么是前缀树,尝试自己实现一下。
2025-06-13 11:37:12
245
原创 力扣面试150题--单词接龙
分析一下,我们进行两两比较字符串的目的是为了找到能一步到达的字符串,那么换种思路,对于一个单词而言,从头到尾修改任意一个字母,都算一步能到达的字符串,于是想到了通配符。双向bfs算法,在之前代码的基础上,不仅从起点往终点搜索,同时从终点向起始搜索,记录变化的距离,直到两者变化到同一种情况,将距离相加即可,结果出现问题了,发现超时了,经过分析后,发现在于构造graph时,每个单词进行两两比较,花费时间过多,因此针对这个点进行优化。t(替换第 2 个字符为!(替换第 3 个字符为!
2025-06-12 17:25:09
361
原创 力扣面试150题--最小基因变化
目的就是将startgene序列转变为endgene序列,每次只能变化一个字符并且变化出来的结果必须是bank里面的结果。
2025-06-10 11:07:58
353
原创 力扣面试150题--蛇梯棋
其他的感觉没啥好说的就是一个简单的宽搜,需要注意的点是,梯子和蛇会跨越传送,这里不一定只往大的值去传送,所以我们需要考虑会不会出现环的问题(这类问题就通过visited数组来记录即可,不要重复访问)。这题的难点在于我们需要将值转化为坐标(蛇形),专门写了一个函数Tohanglie来做这个事情。
2025-06-09 16:09:55
267
原创 力扣面试150题--课程表
初始时,所有入度为 0 的节点都被放入队列中,它们就是可以作为拓扑排序最前面的节点,并且它们之间的相对顺序是无关紧要的。:本质就是将所有前置课程和后置课程作为一个有向图(前者指向后者),判断这个图是否是一个有向无环图(即是否存在拓扑排序)(本质做法是dfs)我们移除 u 的所有出边,也就是将 u 的所有相邻节点的入度减少 1。如果某个相邻节点 v 的入度变为 0,那么我们就将 v 放入队列中。如果答案中包含了这 n 个节点,那么我们就找到了一种拓扑排序,否则说明图中存在环,也就不存在拓扑排序了。
2025-06-08 16:02:55
452
原创 力扣面试150题--被围绕的区域
根据以上中译中,我们可以逆向思维,从边缘的O开始找到与其相连的O,这种岛屿是不需要修改为X,我们将其修改为1,在最后再统一处理,将1改为O,将O改为X。此题的目的在于找到被X包围的O,没有被完全包围(指与边缘的O相连)不算,将完全包围的O变成X。具体找到i相连的岛屿,可以通过深度搜索实现。
2025-06-05 21:24:43
355
原创 力扣面试150题--岛屿数量
一个岛屿是只要1上下左右连接,典型的深搜,如果具体见代码,主要就是得到一个岛屿后,就将1改为2,这样可以节约时间,遍历这个1的上下左右,确定岛屿数量就是通过找1的数目,因为之前为一个岛屿的都改为2了。
2025-06-04 13:17:38
225
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人