- 博客(204)
- 收藏
- 关注
原创 2545. 根据第 K 场考试的分数排序
遍历列表,dict1记录每一行的数据,dict2 记录k列数据以及对应的行。根据排序后的dict2,依次获取对应行的数据。对k列数据进行降序排序dict2。
2024-12-21 16:16:47
535
原创 3138. 同位字符串连接的最小长度
dict1对应同位符次数,则说明此同位符是可以构成字符串的。从len(s)-1开始遍历,若 len(s)%i。若存在多个同位符的情况,则选取字符串长度最小的。
2024-12-20 16:09:36
302
原创 203. 移除链表元素
当pre.next and pre.next.val==val时,说明下一结点是符合删除条件的结点,则进行删除操作,否则继续往下遍历。使用新链表=[-1](可随意设置)+head。考虑到删除头结点情况。
2024-12-17 20:43:08
267
原创 54. 螺旋矩阵
若复制代码运行报错,则注意看下代码里的martix是否与题目给的方法的参数不一致。遍历顺序:向右、向下、向左、向上,循环遍历,直到遍历结束。当按顺序遍历结束时,缩小边界。
2024-12-16 16:42:02
179
原创 209. 长度最小的子数组
re=0 表示当前为第一个条件成立的窗口,直接赋值大小,re!=0 ,则比较满足条件的当前窗口和上一个窗口的大小,哪个小就赋值给r。若s-nums[l]>=target,则说明当前符合条件的窗口可以继续缩小窗口,则缩小窗口。re:最小子数组(最小窗口)长度。
2024-12-15 15:18:44
173
原创 76. 最小覆盖子串
l表示滑动窗口初始位置,r表示窗口最末位置,flag表示当前窗口是否全部包含覆盖字符,是True,否:False,re表示最小覆盖子串。if len(re)==0 or len(re)>=r-l+1:加上len(re)==0原因:由于最小覆盖字符初始时设置为’ ',则第一次获取到覆盖窗口时,应直接将窗口的字符串赋值给re。则要去判断缩小窗口(l向右移动)后的窗口还能全覆盖字符t吗,如果覆盖则继续缩小窗口,但缩小后不能覆盖,则说明当前窗口已经是覆盖字符的最小窗口,不能再缩小了,只能扩大窗口。
2024-12-15 14:09:19
341
原创 111. 二叉树的最小深度
1.左右子树都为空,则最小深度=1(只有根节点)(也可理解为 min(0,0)+1)+1原因:递归的是左右子树,找到最小深度后,还要加上根节点即为整个二叉树的最小深度。2.左子树为空,右子树不空,则最小深度=右子树最小深度+1。3.左子树不为空,右子树为空,最小深度=左子树最小深度+1。4.左右子树不为空,最小深度=左右子树最小深度+1。
2024-10-19 10:55:52
265
原创 239. 滑动窗口最大值
当当前值大于等于maxs列表里的值,则删除maxs列表比它小的值,因为这个值与比它小的值所共处的窗口中,它是最大值,那就没有必要留下比它小的值(可以假设成遍历到的值为区间的最后一个数来理解,那这个区间里,当前数是区间最后一个数,而自己又是最大值,说明自己是此区间中的最大值)maxs[0][1]:说明当前窗口的最大值是窗口的第一个数,向右滑动至下一个窗口,下一个窗口无这个值(不参与下一个滑动窗口),所以要删掉对应的值。先创建一个长度为k的滑动窗口,接着依次往右滑动窗口。t:存放每个滑动窗口的最大值。
2024-10-18 16:46:55
320
原创 72. 编辑距离
2.0~j-1 可以弄出word1=word2,也就是0-i可以弄出word2 0~j-1的字符串,则此时word1需要再加一个字符才能相等。dp[0][j]:0代表空字符串,可以理解为空字符变成字符串需要插入字符的次数 即次数为 j。3.0~i-1 可以弄出0~j-1字符串,则word1需要再添加一个字符才能相等。i代表 word1字符串0~i j代表word2字符串0~j。dp[i][0]: 字符串变成空字符串需要删除的次数,即次数为i。j,取操作次数最少的步骤即可。j-1字符串所需要的次数。
2024-10-10 00:52:19
647
原创 75. 颜色分类
从r到len(nums)-1继续进行排序,从尾部开始,将最大值放置尾部。先排最小的数,将最小的数都放至列表前面 则0~r-1都是最小值。
2024-10-10 00:26:11
243
原创 1143. 最长公共子序列
当text1[i]==text2[j]时,当前字符相同,此时的最长公共子序列长度=text1[0:i]、text2[0:j](0~ i-1、0~j-1 )之间最长公共子序列+1。text1[0:i]、text2[0:j]是代表 0~ i-1、0~j-1 (字符串的截取s[i:j]取不到j位置的字符,而是j-1)dp[i][0]、dp[0][j] 代表其中任一字符串为空时的公共子序列,自然是0 为了方便,初始化dp为0。=text2[j]时,当前0~ i、0~j最长公共子序列为下方最长公共序列。
2024-10-09 23:23:31
358
原创 5. 最长回文子串
dp[i][j]回文:s[i]=s[j]且[i-1:j-1]也为回文。从第一个字符开始遍历,判断对应字符串是否是回文且是不是最大长度。dp[i][j] 表示下标位置i到j的字符串是否是回文的情况。时间复杂度:O(N^3)状态初始化为False。
2024-10-08 17:12:00
491
原创 295. 数据流的中位数
(self.stack[t//2-1]+self.stack[t//2])/float(2),记得要用float。中位数:有序列表的中间值,用sort()进行排序。
2024-10-08 12:14:00
184
原创 347. 前 K 个高频元素
4.s1中会有空的情况 如nums =[1,1,1,2,2,3] ,次数4、5、6都没有,为[],所以用t来存储次数不为空的数字(排好序),t[0:k]即为前K个高频元素。如nums =[1,1,1,2,2,3] len(nums)=6 有可能一个数字出现6次的情况。3.s1是记录数字出现0-n次的情况,是有序的,所以从右往左遍历,先遍历到的都是次数最大的。1.哈希集合记录每个数字出现的字数。2.s1来记录出现次数对应的数字。时间复杂度:O(Nlogn)
2024-10-08 12:01:17
316
原创 152. 乘积最大子数组
mins:记录当前位置最小乘积,因为当前位置的最大乘积 有可能是i-1的最小乘积*当前位置。如i-1最小乘积为-3,最大乘积为4 i当前位置值为-2 则。dp[i]最大乘积自然是-3*(-2)=6。maxs:记录当前位置最大乘积。
2024-10-05 18:08:08
199
原创 84. 柱状图中最大的矩形
当前柱子heights[i]小于t[-1]位置柱子,说明t[-1]位置右边的最小柱子出现了,而t[-1]位置左边最小柱子为t[-2](单调递增栈),此时可以计算出以t[-1]位置柱子围成的最大面积。首先下标为0入栈(初始化),接着,当前柱子heights[i]大于等于t[-1]位置的值,说明t[-1]右边最小未出现,将当前柱子入栈。heights首末尾加上0 : 预防 [2,4,6,8]情况 2无左边最小值 列表数字无右边最小值。
2024-10-05 15:56:45
495
原创 739. 每日温度
从第二个温度开始,如果当前温度大于t[-1]位置的温度,则说明找到t[-1]位置温度的下一个更高温度,则修改对应的s。若t=[],说明当前温度高于此位置前的所有温度(即当前位置之前的温度都找到了自己与之的最高温度)。若当前温度小于t[-1]位置温度,说明温度比t[-1]位置温度还低,入栈,继续遍历找比它高的温度。遍历结束后,对于s[i]==-1:说明找不到与之对应最高温度,则赋值为0。
2024-10-04 23:36:59
171
原创 394. 字符串解码
对之前入栈的数据进行出栈操作,遇到’['说明已找到此时需要循环的字符串s,将s反转(栈先进后出,反转后才是原字符串)继续出栈,若出栈的数字,找到非数字为止,则非数字之前的数据n即为要循环的次数。找到循环的字符串和循环次数后,进行循环,接着将循环后的字符依次存入栈t。
2024-10-04 22:45:34
370
原创 79. 单词搜索
未终止,继续循环:记录当前已走过位置(等于work[k]),以当前位置向四周遍历,找到则往对应方向继续循环;四个方向都找不到匹配,则回退再继续遍历。v:代表等于work[k]且已走过的位置。找到了:终止(先判断匹配再判断找到)
2024-10-04 17:44:56
701
原创 134. 加油站
假设起始位置前的净油量和为A,起始位置开始到末尾(-1这个位置)的净油量为B 即能回到起始位置需要总油量为A+B,即A+B>=0时,说明能回到起始位置(循环一圈)到达当前位置total
2024-09-26 01:16:06
319
原创 122. 买卖股票的最佳时机 II
卖出最大利润的情况:当天卖出比前一天卖出利润小,说明前一天就是卖出的最好时期,前一天卖出 : 则今天就是购买的日期 ,买入最小价格必然是今天(新一轮的查找卖出最大利润),则今天买、卖,利润为0。prices.append(0) 预防[1,2,3,4,5]情况。假设dp代表当天卖出的利润。mins代表买入的最小价格。
2024-09-24 12:37:23
336
原创 207. 课程表、210. 课程表 II
dict1用来装有入度的结点以及对应的入度数(如:[0,1] 学了1才能学0:即1指向0,即只有0有入度 所以prerequisites每个值i的i[0]即为有入度的结点)在遍历无入度结点时(代表选这门课程),因为有指向,所以 对应指向值的入度-1,当对应指向值入度为0时即作为下一层的无入度结点 循环遍历。遍历结束后,若dict1中有入度大于0,说明无法完成所有课程的学习。第一层:当前prerequisites无入度的结点。t:表示当前层无入度的结点(入度为0)n:表示下一层无入度的结点。
2024-09-22 15:08:10
287
原创 994. 腐烂的橘子
先找出未被感染的橘子总数s,找出已腐烂的橘子作为第一层,这一层(当前q)的橘子同时在1分钟内分别去感染相邻未腐烂的橘子,即遍历结束q,只要有感染(不管有多少个腐烂橘子去感染未腐烂的),时间+1。则遍历q的时候,把q.left、q.right装进next中,遍历q(当前层)结束后,将下一层赋予q,即q=next,继续重复操作。next:腐烂橘子要感染的橘子(即为下一次腐烂的橘子)q:装着当前腐烂的橘子位置(如二叉树的层级遍历 )q装的是当前层的结点,next装的是下一层的结点。s:未被感染的橘子总数。
2024-09-22 12:45:41
380
原创 695. 岛屿的最大面积
以当前陆地组成的岛屿面积=当前陆地面积+向上的陆地面积+向下的陆地面积+向左的陆地面积+向右的陆地面积。往当前的上、下、左、右位置分别找陆地位置,为陆地。1>标记为2:代表已经遍历过的陆地。只有当前是陆地,才会构成岛屿。2>记录当前方向的陆地总数。当前是陆地,进入回溯。
2024-09-21 20:46:02
317
原创 35. 搜索插入位置
2>target大于首位,小于末位,则进行插入位置的查找,存放位置规律 值大于前一个数、小于或等于后一个数。1.先用in方法判断列表中是否有target,有则用list.index()直接找出对应下标。1>列表的in方法,有则返回True,无则返回False。列表为空或 target<=首位,则位置在首位。target比末位还大,则在末位的后边。2.列表不存在target。
2024-09-20 18:03:44
286
原创 4. 寻找两个正序数组的中位数
2>数组长度为偶数,则是中间两个的和除以2 需要注意的一点是,除数除除数,得到的数是整数,所以需要进行数据的转换 counts/float(2) 将2转换成float类型,或者将counts转换成float类型也行。如果其中一个数组为空数组,则直接进行中位数的求解。1>数组长度为奇数,则中间值为中位数。
2024-09-19 14:30:08
218
原创 34. 在排序数组中查找元素的第一个和最后一个位置
存在,则找出第一个等于target值的列表位置,即目标值在列表中的开始位置。接着在当前位置继续往下查找,找到最后一个目标值等于列表值的位置。先判断target是否存在列表中,不存在直接输出。
2024-09-19 12:53:13
365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人