- 博客(288)
- 收藏
- 关注
原创 day-112 删掉一个元素以后全为 1 的最长子数组
用一个变量统计窗口内0的个数,首先窗口右边界不断右移,如果窗口内0的个数大于1,则进行左窗口右移,知道0的个数小于等于1,用变量ans统计最长数组长度(r-l)变长滑动窗口:目要求删掉一个元素,返回最长的且只包含 1 的非空子数组的长度,那么我们只需要返回最长的包含一个0的子数组长度-1。
2025-03-31 12:57:43
188
原创 day-112 判断一个括号字符串是否有效
用两个数(max,min)统计(的范围,当不可修改时且遇到(,min++,max++;当不可修改时且遇到)min–,max–;当可以修改时,min–,max++注意,当min==0时遇到可修改,只能取),即令min=1。
2025-03-26 19:18:58
277
原创 day-112 k-avoiding 数组的最小总和
题目中告诉我们不存在任何求和等于 k 的不同元素对,且数组所有元素都不同。我们知道元素对和为k的组合方式有1和k-1,2和k-2…因为要返回可能最小值,那么我们肯定取1,2,3…k,k+1,k+2…我们只需返回1,2,3…k/2,k,k+1,k+2…(长度要为n)的和即可。
2025-03-26 11:04:42
195
原创 day-110 下降路径最小和 II
暴力求解,从第二行开始,对于每一行的的任意元素,到当前位置的最小和为上一行且与当前元素不在同一列的元素最小和加上当前元素。最后我们只需返回第grid.length-1行的最小元素即可。
2025-03-21 15:36:53
170
原创 day-109 转换二维数组
利用哈希表存储每个数字出现的次数,然后循环遍历key值,将key值对应value值大于0的key值存入List,最后将List存入List。当List为空时,不要存入List,否则会多一行空行。
2025-03-19 09:58:28
133
原创 day-108 使字符串平衡的最小交换次数
从左向右遍历字符串,用一个变量num(初始为0)记录’[‘的数量,遇到’[‘num++,遇到’]‘则num–,如果num<1且当前为’]‘则需要交换,运用贪心的思想,首先将最后面的’]'交换到前面。关键:可以不用真的交换,因为每次交换的排在最后的’[‘,所以不存在影响交换次数的情况,所以遇到num<1且当前为’]'的情况,只需将num++和交换次数++
2025-03-18 15:17:17
205
原创 day-107 元音辅音字符串计数 I
滑动窗口:用滑动窗口记录元音至少出现一次且每个辅音至少出现k的子字符串个数,记作getnum(k)我们需要返回的就是getnum(k)-getnum(k+1)
2025-03-14 16:42:45
146
原创 day-106 每一个查询的最大美丽值
查询queries[j]能得到的最大值使用二分查找,只有当当前price<=queries[j],且下一个price>ueries[j]或者当前是最后一个price才返回当前的美丽值。二分查找:首先将items按照每行第一个元素从小到大排序,再将每个price能得到的最大美丽值计算出来,然后对于每一次查询,只需返回queries[j]能得到最大美丽值即可。
2025-03-09 20:04:55
210
原创 day-106 统计放置房子的方式数
动态规划:因为中间有街道隔开,所以只需计算一边街道的排列方式,最后计算平方即可。动态转换方程:f[i]=f[i-1]+f[i-2]
2025-03-09 13:48:37
257
原创 day-105 破坏回文串
当字符串长度为1时,直接返回空串,如果长度大于1,对字符串从前往后遍历,当遇到某个字符串不为a时,那么直接将该字符改为a返回即可(注意:如果该字符恰好位于字符串正中央时,不能修改返回,应为修改了还是回文字符串),如果遍历结束后全为a,则将最后一个字符变为b返回。因为要使字符串的字典序最小,所以我们应尽量改前面的字符,这样才能保证字典序最小。
2025-03-05 19:25:32
141
原创 day-104 组合总和 Ⅳ
假设dfs(target)表示组成target的组合数,可得转换方程dfs(target)=dfs(target-nums[0])+dfs(target-nums[1])…注意:nums[i]需要小于等于当前的target。
2025-01-03 19:44:38
465
原创 day-103 课程表
用一个数组记录每个结点的入度,将入度为零的节点序号加入一个队列中,同时用一个邻接表记录每个节点和他的后续节点,每将一个节点加入队列中,则将其后续节点的入度减一,最后判断是否所有节点都进行了排序。拓扑排序,本题210. 课程表 II思路一样,只是不需要返回具体的拓扑序列。
2024-12-31 16:30:52
212
原创 day-103 课程表 II
用一个数组记录每个结点的入度,将入度为零的节点序号加入一个队列中,同时用一个邻接表记录每个节点和他的后续节点,每将一个节点加入队列中,则将其后续节点的入度减一。
2024-12-31 16:23:16
283
原创 day-102 二进制矩阵中的最短路径
从起点依次向八个方向尝试(之后也一样),如果某个位置在矩阵内且值为0且没有访问过,将其添加到一个队列中,依次类推,直到到达出口。
2024-12-30 19:09:52
437
原创 day-102 二叉树中的链表
对二叉树进行遍历,每到一个新节点判断当前的字符串t长度是否大于等于的长度,如果满足,再将t从末尾截取s.length()长度的子串与s进行匹配,若匹配成功,结果为true,直到遍历完整棵树。DFS,先将链表转换为字符串s在进行匹配。
2024-12-30 15:09:13
327
原创 day-101 飞地的数量
从矩阵的四周边界中的陆地进行深度优先搜索,将访问过的陆地进行标记,所有边界位置都进行尝试后,还没被访问过的陆地数即为飞地的数量。
2024-12-28 19:24:47
187
原创 day-101 边界着色
对于每一个满足条件的位置,还需判断该位置是否属于边界,如果是边界,则将其赋值为color。注意:不要在同一个数组里面一遍赋值一遍判断边界,这会导致错误答案。DFS,从给定的(row,col)位置开始深度优先搜索。
2024-12-28 15:00:03
609
原创 day-101 网格图中鱼的最大数目
将每一块不相邻的水域的鱼总和计算出来,返回鱼数量最多的那一块即可。每次找到一个还未搜索的水域,利用DFS得到与其相邻水域鱼的总和,直到所有水域都被搜索。DFS(深度优先搜索)
2024-12-28 10:17:52
316
原创 day-100 查询数组中元素的出现位置
对于每一次查询,如果出现次数小于queries[i],则赋值为-1,否则将链表中索引为queries[i]-1的值赋值。使用一个链表记录x出现的所有索引即可。
2024-12-27 10:40:36
170
原创 day-99 半径为 k 的子数组平均值
创建一个长度为nums.length的数组,先将全部元素赋值为-1,然后进行就是滑动窗口的一般思路。注意:当k=0时,直接就是返回数组本身。滑动窗口,此处窗口大小为2*k+1。
2024-12-25 19:53:38
142
原创 day-99 吃苹果的最大数目
利用PriorityQueue模拟最小堆,由于需要存储腐烂天数和每天的苹果数量,所以可以用int[]类型的优先队列,第一个元素存储腐烂时间,第二个元素存储剩余苹果数量。最小堆+贪心,每次吃掉最快腐烂的苹果。
2024-12-25 17:20:08
218
原创 day-99 切蛋糕的最小总开销 I
把每一块 1 x 1 的蛋糕看做一个节点,现在每个节点与上下左右相邻的节点(如果存在)连接在一起,我么需要从这个图中找出最小生成树。每次找到最小的边,将其加入最小生成树,最后返回即可。注意:如果选择一条横向边,那么要将其乘以(n-j)在,这是因为纵向每切一刀,当前横向就得就得多切一刀。参考灵神,利用最小生成树来解决。
2024-12-25 15:58:26
421
原创 day-96 根据第 K 场考试的分数排序
利用函数Arrays.sort(score,(a,b)->b[k]-a[k])进行排序,表示将数组score的第k+1列从大到小排序。注意:不要直接return。
2024-12-21 10:52:23
204
原创 day-95 定长子串中元音的最大数目
定长滑动窗口,先统计0至k-1有多少个元音字母,然后依次将窗口后移。每次移动考虑新加入的单词是否是元音字母,移除的单词是否是元音字母。
2024-12-20 19:10:49
260
原创 day-93 数组大小减半
因为题目中已经告诉arr[i]的取值范围,所以直接新建一个10001长度的数组,用于统计每个数字出现的次数。将每个数字出现字数进行统计,优先把出现次数高的数字删除,直至数组大小减半即可。
2024-12-15 10:36:07
137
原创 day-91 找到冠军 II
因为队伍按照0到n-1进行编号,所以可以用一个长度为n的数组表示每支队伍,索引i即代表队伍的编号,遍历edges,将较弱的队伍标记为-1,最后统计标记为0的队伍即可。根据edges将所有弱的队伍标记为出来,然后只需统计那些不存在强于自身的队伍的数量,如果数量为1,该队为冠军,如果数量不为1,返回-1。
2024-12-08 10:52:14
197
原创 day-90 使数组为空的最少操作次数
对于每个数字(假设出现次数num),如果num等于1,返回-1;如果num%3等于0,返回num/3;如果num%3不等于0,返回num/3+1。统计每个数字出现的次数,计算每个数字的操作次数,将所有操作次数累加返回即可。
2024-12-06 16:15:49
140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人