- 博客(197)
- 收藏
- 关注
原创 leetcode121买卖股票的最佳时机
MAX记录的是i位置右边的最大值,则i位置买卖股票的最大收益即为MAX-prices[i]。ret用于记录最大的收益,初始化为0。从后往前遍历prices向量,更新ret值,再更新MAX值,最后返回ret,即为所求。
2026-06-09 16:16:26
271
原创 leetcode3689最大子数组总值I
遍历数组,找出最大值MAX和最小值MIN,结果即为k*(MAX-MIN),最后计算返回即可。由于本题的子数组可以重复选择,所以,可以使用。
2026-06-09 08:52:39
377
原创 leetcode287寻找重复数
(1)首先,初始化slow指针为nums[0],fast指针为nums[nums[0]],slow指针每次走一步,fast指针每次走两步,直至slow==fast;(2)再定义一个新指针ptr,初始化为nums[0],ptr和fast每次走一步,直至二者相遇,返回此时的ptr,即为所求。由于本题的数字的范围为[0,n],数组的下标为[0,n],经过分析可以得知本题实质上是在找环的入口,可以使用。首先,对nums向量进行一个排序,重复出现的数字会挨在一起,进行搜索即可。
2026-06-09 08:21:00
241
原创 Leetcode31 下一个排列
3>翻:将[i+1,nums.size()-1]区间翻转,由于该集合为降序,所以进行逆转,保证增幅最小。<2>换:将该位置的数与[i+1,nums.size()-1]区间最小的但大于其的数交换;<1>找:从右向左找到第一个可以增大的位置i,即最小的可以增大的位置;
2026-06-08 22:14:52
194
原创 leetcode2161 根据给定数字划分数组
本题与荷兰国旗问题有一定的区别,如果用三指针来解决,相对顺序是有可能被打乱的,所以本题可以使用直白的三次遍历,即。,分别将<pivot的数,=pivot的数,>pivot的数加入ret向量。
2026-06-08 19:59:03
296
原创 leetcode1926 迷宫中离入口最近的出口
(2)接着,从入口开始进行深度优先搜索,由于本题需要统计的是最小步数,也就是层数,所以需要变量size来记录每一层的节点数,便于统计。如果找到了出口,直接返回step,如果循环执行完了还未找到出口,那就返回-1。由于本题需要求最短路径的长度,所以可以使用。(1)首先,对全局变量进行初始化;
2026-06-07 15:52:49
256
原创 leetcode542 01矩阵
(2)接下来进行bfs。将队头元素弹出,遍历其四周,如果坐标不越界且dis[next_x][next_y]==-1,即该位置为1且未被辐射到,就将其dis值修改为dis[cur_x][cur_y]+1。的方法来解决这个问题,由于本题需要聚焦到每一个为1的位置。所以,需要定义一个dis向量来记录1到最近的0的距离,所有元素值初始化为-1。(1)首先,遍历mat,将mat[i][j]==0的(i,j)入队,并将dis[i][j]由-1修改为0,表示其到最近的0的距离为0;辐射完后,返回dis,即为所求。
2026-06-07 12:57:35
241
原创 leetcode994 腐烂的橘子
2>将当前队列中的所有元素出队,于此同时,将其四周新鲜的橘子加入队列,即进行腐烂操作,如果本轮进行了腐烂操作,就将rotted更新为true。本分钟的腐烂操作完成后,根据rotted的值更新time;<1>统计当前队列中元素的数量,即当前分钟能进行辐射腐烂的橘子数量。更新orange的值为当前新鲜的橘子数量。<3>如果orange==0,即新鲜的橘子数量为0,就返回time。否则,表示不可能全部腐烂。(1)首先,遍历grid,统计橘子的总数,将腐烂的橘子加入队列;
2026-06-07 10:34:17
354
原创 leetcode2574 左右元素和的差值
即可,实质上是前缀和。值得注意的是,为了保证下标的统一,leftSum和rightSum的size应该为nums.size()+1。而且,填写2个向量的起始位置和结束位置也要注意,最好能针对一个示例画图处理。由于本题意思很明确,所以只需要。
2026-06-06 12:26:06
257
原创 leetcode41 缺失的第一个正数
(1)首先,遍历向量nums,如果nums[i]>0且未在正确的位置上,就将其换到正确的位置上,注意不能越界,完成遍历,将所有正整数n放置到索引位置n-1;(2)然后,遍历操作完后的nums向量,如果在遍历过程中发现nums[i]!=i+1,就返回i+1,这个数字即为缺失的数字;由于本题要求时间复杂度为O(n),空间复杂度为常数级,所以不能使用枚举和哈希表来解决,智能就地解决,可以。若遍历完成仍未发现,就返回n+1,即为缺失的最小正数。
2026-06-05 15:58:04
731
原创 leetcode56 合并区间
的方法来解决这个问题。(1)首先,对intervals向量进行排序,重写比较器,按照区间左边界从小到大排序,使得有重叠区域的区间相邻;(2)start和end用于记录当前区间之前的上一合并完的区间的情况<1>如果当前区间和它有重叠部分,就进行一个合并;<2>如果没有,就将start和end维护的区间加入ret,更新start和end的值;
2026-06-05 12:21:41
400
原创 leetcode3751 范围内总波动值I
2>否则,进行滚动各位数字分离,更新next2,now,next1,如果now为峰或者谷,ret++,直至i==0;<1>如果i<=100,表示其波动值为0;
2026-06-04 15:18:34
59
原创 leetcode239 滑动窗口最大值
来记录窗口中元素出现的次数,map的键是窗口中的数,值为该数字在窗口中出现的次数。由于map的底层实现是红黑树,所以。,将其加入ret向量即可。
2026-06-03 17:13:25
341
原创 leetcode3635 最早完成陆地和水上游乐设施的时间II
1>先开始陆地,再开始海洋:time1=max(landstart+landduration,waterstart)+waterduration。<2>先开始海洋,再开始陆地:time2=max(waterstart+waterduration,landstart)+landduration。然后更新ret为min(time1,time2),完成枚举后,ret即为最短的时间,返回即可。<1>先陆地再海洋:最早结束的陆地项目和所有的海洋项目匹配;<2>先海洋再陆地:最早结束的海洋项目和所有的陆地项目匹配;
2026-06-03 15:13:44
186
原创 leetcode3633 最早完成陆地和水上游乐设施的时间I
1>先陆地后海洋:time1=max(landstart+landduration,waterstart)+waterduration;<2>先海洋再陆地:time2=max(waterstart+waterduration,landstart)+landduration;(1)遍历陆地项目,固定陆地项目,枚举海洋项目,就是构成一个(i,j)对,i为陆地项目的下标,j为海洋项目的下标;完成全局枚举,ret为最小的time值;
2026-06-02 11:49:06
362
原创 leetcode2144 打折购买糖果的最小开销
单价最贵的2颗糖果是无法通过免费兑换获得的,必须原价购买,而购买完这2颗糖果后,可以免费获得的单价最高的糖果就是单价第三贵的糖果,以此类推。(2)然后从最贵的糖果开始,3个糖果分为一组,买下这一组中最贵的2颗,免费兑换最便宜的一颗;(3)如果最后有些糖果无法凑成一组,那这些糖果我们必须直接购买。要使得获得所有糖果的总开销最小,那就要保证。(1)首先,先将cost向量从小到大排序;
2026-06-02 00:08:58
171
原创 leetcode2126 摧毁小行星
的方法来解决这个问题。首先对asteroids向量进行从小到大排序,遍历排序后的数组,一步步累加进行比较,直至遍历完成,返回true,如果M<X,就返回false,无法完成碰撞。
2026-05-31 16:56:33
191
原创 leetcode2078 两栋颜色不同且距离最远的房子
1>固定最左边的位置left1,right1从右往左遍历,第一个colors[left1]!=colors[right1],计算ret1=right1-left1;<2>固定最右边的位置right2,left2从左往右遍历,第一个colors[left2]!=colors[right2],计算ret2=right2-left2;的方法来解决这个问题,每次固定左边的位置,从右边开始枚举,直到到达数组尾部,枚举完所有的情况;通过观察我们可以知道,满足题意的位置一定与最左边的位置和最右边的位置有关(
2026-04-20 14:45:42
62
原创 leetcode1855 下标对中的最大距离
由于两个数组都是非递增的,即nums[i]>=nums[i+1],所以,往后移动只能越移动越小,指针不需要回退,所以可以采用。穷举所有满足i<=j的对,进行判断处理,会超时,通过不了。的方法来解决这个问题。
2026-04-19 10:13:25
43
原创 leetcode19 删除链表的倒数第N个结点
解决,fast指针一直比slow指针快n+1步,这样当fast指针为nullptr(即链表尾部)时,slow指针指向的是需要删除的节点的前一个位置,正常删除即可;形式,而不开辟新空间,降低空间复杂度的同时免去了泄露的风险。,再进行删除,最坏情况下需要遍历链表2次;删除第n个节点需要移动的。链表统计链表的长度,
2026-04-18 11:03:19
168
原创 leetcode 42 接雨水
雨水量按列计算,每一列的储水量为min([0,i-1]最高的高度,[i+1,n-1]最高的高度)-height[i],如果这个值为正数,表示可以接雨水,加上这个差值就行,否则就无法储水,加上0。暴力法是针对每一个height[i],分别向左、向右寻找最大高度,再进行按列计算,因此时间复杂度为O(n*n),我们可以预处理两个数组,,再遍历height数组进行计算,3次遍历,将时间复杂的降低为O(n);针对解法一,我们可以再一次进行优化,即无需进行3次遍历,使用。
2026-04-12 00:08:00
231
原创 P1464 [PacNW 1999] Function
通过阅读题目可知,w(a,b,c)的最小值为1,所以可以将memo数组初始化为0,第三、四种情况时,先查数组,如果前面已经计算了,就直接返回,否则,就递归计算,然后更新memo[a][b][c]的值。的方法来解决这个问题。
2026-04-09 15:02:48
45
原创 leetcode 面试题17.16 按摩师
2>否则,dp[i]=Max+nums[i];Max为max(dp[i+2],...,dp[m-1])(2)否则,最长的服务时间为nums[i]+max(dp[i+2],...,dp[m-1]);(1)i==m-1或者i==m-2:最长服务时间为nums[i];1>i==m-1或者i==m-2:dp[i]=nums[i];dp[i]表示为i位置为起点的最长的时间。开始填写,即从m-3位置往0位置填写。由于服务时间均为正数,所以。
2026-01-14 19:34:39
102
原创 leetcode 174 地下城游戏
设当前的生命值为x,则有x+d[i][j] >= dp[i+1][j],即x>=dp[i+1][j]-d[i][j],最小生命值为dp[i+1][j]-d[i][j],向下亦然,所以。由于本题是具有后滞性的动态规划问题,所以不同于一般路径问题dp[i][j]表示以(i,j)为终点,本题属于路径相关问题的变形,可以采用。dp[0][0]即为所求,返回即可。从后往前,从右向左进行填写。的方法来解决这个问题。
2026-01-14 17:07:13
246
原创 leetcode 1015 可被K整除的最小整数
由于题目描述比较清楚,所以我们可以用来解决这个问题。任何数对k取模的结果最多有k种情况(0,1,2......k-1),所以我们,如果出现某次取模的结果为0,可以直接返回len,否则,后续再进行操作,其结果一定是前面出现过的结果。
2025-11-25 20:25:25
237
原创 leetcode 2154 将找到的值乘以2
由于本题目的original是一个递增的target,所以我们可以先将nums从小到大排序,再进行模拟搜索。由于original逐渐增大,过程中current也不用回退,只需遍历一遍排序完成的nums向量即可。
2025-11-19 14:40:53
235
原创 leetcode 429 N叉树的层序遍历
可以借助来完成n叉树的层序遍历,由于需要返回一个二维数组,所以需要在每次处理队列中的节点之前进行计数。
2025-11-18 00:11:25
340
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅