LeetCode算法
北京师范大学 2023春 保研机试打卡
Destiny坠明
学为人师,行为世范
展开
-
每日1题 -老鼠和奶酪
【代码】每日1题 -老鼠和奶酪。原创 2023-06-07 13:06:45 · 429 阅读 · 0 评论 -
每日1题 -相等行列对
库中的一个函数,可以用来统计一个 python 列表、字符串、元组等可迭代对象中每个元素出现的次数,并返回一个。原创 2023-06-06 11:48:43 · 232 阅读 · 0 评论 -
每日1题 -对数组执行操作
【代码】每日1题 -对数组执行操作。原创 2023-06-05 12:09:51 · 197 阅读 · 0 评论 -
每日1题 -不同的平均值数目
【代码】每日1题 -不同的平均值数目。原创 2023-06-04 11:38:02 · 148 阅读 · 0 评论 -
每日1题 -统计范围内的元音字符串数
我的二分法插入代码如下↓。原创 2023-06-02 18:37:16 · 61 阅读 · 0 评论 -
适合打劫银行的日子
【代码】适合打劫银行的日子。原创 2023-05-29 12:52:42 · 49 阅读 · 0 评论 -
每日1题 -有序矩阵中的第 k 个最小数组和
Python代码如下↓。原创 2023-05-28 18:23:20 · 50 阅读 · 0 评论 -
机试打卡 -16 矩阵置零(矩阵)
不过这样会存在一些重复的工作,若原矩阵同列或同行有不止一个0元素,则不必对该列或该行的其它元素重复赋0。原创 2023-05-28 16:17:08 · 50 阅读 · 0 评论 -
机试打卡 -15 合并区间(数组)
【代码】机试打卡 -16 合并区间(数组)原创 2023-05-28 15:44:17 · 47 阅读 · 0 评论 -
每日1题 -大样本统计
【代码】每日1题 -大样本统计。原创 2023-05-27 22:19:17 · 46 阅读 · 0 评论 -
机试打卡 -14 轮转数组(数组)
①nums=nums[::-1],会改变nums的地址;nums[:]=nums[::-1],不会改变nums的地址。②数组翻转的代码 nums[:k]=nums[:k][::-1];nums[k:]=nums[k:][::-1]这种写法虽然简单,但效率不高。因为若 k 很大时,每次都需要执行。这两个操作,引入模运算可以应对k较大的情况。原创 2023-05-27 20:11:03 · 42 阅读 · 0 评论 -
机试打卡 -13 最小覆盖子串(滑动窗口)
在滑动窗口类型的问题中都会有两个指针,一个用于「延伸」现有窗口的 r 指针,和一个用于「收缩」窗口的 l 指针。在任意时刻,只有一个指针运动,而另一个保持静止。我们在 s 上滑动窗口,通过移动 r 指针不断扩张窗口。当窗口包含 t 全部所需的字符后,如果能收缩,我们就收缩窗口直到得到最小窗口。原创 2023-05-27 19:26:55 · 52 阅读 · 0 评论 -
机试打卡 -12 滑动窗口最大值(优先队列&堆)
在有些情况下,可能需要找到元素集合中的最小或者最大元素,可以利用优先队列来完成操作,优先队列ADT是一种数据结构,是一种有特殊用途的数据结构,用来在一组变化频繁(发生增删查改的频率较高)的数据集中。我的思路1:队列,每次 出队+入队,记录1个队列中的最大值索引,超时。我的思路2:建立排序队列,每次 出队+入队,采用 折半搜索,超时。官方题解:优先队列(堆),将整个数组看作是堆。原创 2023-05-27 12:07:40 · 1301 阅读 · 0 评论 -
机试打卡 -11 数组的乘积(前缀和)
思路:“除自身以外的数组的乘积”可以转化为求该元素的前缀积和后缀积,即先遍历两遍数组,得到前缀积数组和后缀积数组,第三次遍历即将前缀积数组和后缀积数组按位相乘。注意:后缀suffix 需倒序排列。原创 2023-05-26 16:41:13 · 85 阅读 · 0 评论 -
机试打卡 -10 最长子串(哈希表&滑动窗口)
我的思路:首先构建列表作为滑动窗口。在遍历字符串的过程中,当出现重复字符时,删除 滑动窗口(列表) 从开头到重复字符位置的所有元素。“最长子串”,很容易想到 滑动窗口。原创 2023-05-25 21:16:13 · 49 阅读 · 0 评论 -
机试打卡 -09 两数之和(哈希表)
根据“三数之和”的思想,我采用了 排序+双指针 的算法👇。哈希表 为本题更简单的方法,官方代码如下👇。原创 2023-05-25 18:08:55 · 47 阅读 · 0 评论 -
机试打卡 -08 三数之和(排序&双指针)
若直接选择在原数组nums中,采用三重循环确定答案,时间复杂度为O(N**3),超时……原创 2023-05-25 17:18:52 · 44 阅读 · 0 评论 -
机试打卡 -07 盛水的容器(双指针)
假设某一时刻,water=W,选择容器的左边界索引为 i ,高度为 height[i]。那么容器至少需要 W/height[i] 的宽度才有可能突破 W 的容量上限。优化一下:当每次选择一个容器的左边界时,并不需要遍历计算之后每一条垂线充当右边界的情况。最简单粗暴的方法,两个for循环,遍历 n(n-1)/2 次,当然超时。原创 2023-05-25 10:51:49 · 53 阅读 · 0 评论 -
机试打卡 -06 异位词分组(哈希表)
比如可以通过list.append(),set.remove(),dict[‘key‘] = value对其进行修改,所以它们都是不可哈希的;②dict.values() 将字典中的所有 value 全部取出,但需要使再用 list() 或 tuple() 转换数据类型;①sorted() 函数将返回一个排序后的列表,若需要重新组合成字符串,需使用 "".join()函数。一个对象在其生命周期内,如果保持不变,就是hashable(可哈希的)。dict.keys() 同理。原创 2023-05-24 20:21:47 · 693 阅读 · 0 评论 -
机试打卡 -05 接雨水(动态规划&栈)
新柱子的 right_height 则分为两种情况,一种是 新柱子的高度不等于前一个柱子的 right_height,这种情况下则令新柱子的 right_height 直接取 前一个柱子的 right_height 即可;另一种情况则是 新柱子的高度等于前一个柱子的 right_height,即说明前一个柱子的 right_height 可能取自该根柱子,则新柱子的 right_height 取后面的柱子的最大值(数组切片) 即可。动态规划 - 复杂度分析。,有些类似递归的思想。原创 2023-05-24 18:49:53 · 714 阅读 · 0 评论 -
机试打卡 -04 移动零(双指针)
当第一次出现0元素之前,左右指针齐头并进。但当第一个0元素出现时,右指针和左指针同时指向该0元素,但随后右指针继续向右移动,直到下一个非零元素的交换。次,用 i 记录当前指针的位置。若当前元素非零,i+1;若当前元素为零,先del nums[i] 再向列表末尾添加0。原创 2023-05-23 21:25:32 · 38 阅读 · 0 评论 -
机试打卡 -03 最长连续序列(哈希表)
方法是Python的列表方法,用于对原列表进行排序。list.sort方法没有任何返回值。因为要保证下一个元素无论从哪一端接入该序列时,都可以立即知道当前序列的长度。函数在原有列表上直接排序,因此该方法使用完后原列表的顺序发生了改变。的排序方法,其时间复杂度为O (n*logn),而且这是一种。①set()函数将列表转换为集合,清除相同元素。而Python里的sort排序是一种名为。原创 2023-05-23 18:46:40 · 73 阅读 · 0 评论 -
机试打卡 -02 和为 K 的子数组(哈希表&前缀和)
哈希函数就是将key和value值对应起来的函数。在不同语言中,哈希函数的实现方式是不一样的,,这种数据结构提供了键(key)和值(value)的映射关系。枚举法,很容易想到↓。原创 2023-05-22 22:53:02 · 42 阅读 · 0 评论 -
机试打卡 -01 字母异位词(滑动窗口)
算法小白的代码如下↓虽然代码没有提交成功,但是需要注意几个点:①类中方法的参数在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法包含参数self, 且为第一个参数,self代表的是类的实例。fff②Python把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。返回值:得到一个新的字符串,不会改变原来的字符串。原创 2023-05-22 19:47:01 · 436 阅读 · 0 评论