- 博客(11)
- 收藏
- 关注
原创 【代码随想录】Day 13 239.滑动窗口最大值 347.前K个高频元素
heapq.heappush(pri_que,(freq,key)),加入pri_que的元素是元组,heapq.heappop(pri_que)[1]是将元组中的第二个元素放入result。定义一个单调队列,队列里的元素要排序,最大的元素放在队列口,维护有可能是最大值的元素在队列出口,弹出没有加入元素大的所有元素。如果元素超过k,弹出堆顶的元素(堆顶的元素频率最小)定义一个大小为k的小顶堆,扫描所有元素放入堆。先统计每个元素出现的频率。
2024-02-05 18:06:48
280
1
原创 【代码随想录】Day 10 232.用栈实现队列 225.用队列实现栈
删除元素的时候,输出栈如果是空的,就从输入栈把元素全部都导入进来,如果输出栈不为空,就直接从输出栈弹出数据。注意 not self.stack_out 和self.stack_out==None是不一样的。注意:return len(self.queue_in)将队列头部的元素除了最后一个元素重新添加到队尾。如果进栈出栈都是空的,那么模拟的队列是空的。0是不一样的,可能元素由空列表组成。append 将元素添加在最右侧。popleft删除最左侧元素。需要用两个栈,一个进一个出。
2024-02-04 23:27:13
322
1
原创 【代码随想录】Day11 20.有效的括号 1047.删除字符串中的所有相邻重复项 150.逆波兰表达式求值
多了左括号 多了右括号 左右括号不匹配。力扣提示eval那一句有错误。栈用来存遍历过的元素。
2024-02-04 23:27:00
430
1
原创 【代码随想录】Day9 28.实现strStr 459.重复的子字符串
找到不匹配的地方前面的一个子串,最长相等前后缀是多少,此例为2,有一个后缀aa,前面也有一个与其相等的前缀aa,从与其相等的前缀的后面继续匹配,所以从b处开始重新匹配。初始化——前后缀不相同——前后缀相同——next。传统方法:暴力匹配,时间复杂度O(m*n)后缀:只包含尾字母,不包含首字母的所有子串。前缀:包含首字母,不包含尾字母的所有子串。KMP字符串解决的就是字符串匹配的问题。文本串 aabaabaaf。文本串中是否出现过模式串?最长相等前后缀010120。模式串 aabaaf。
2024-02-01 23:12:07
385
1
原创 【代码随想录】day8 344.反转字符串 541.反转字符串2 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网:55.右旋转字符串
range(len(s)//2)边界条件代入例子试一下。方法很多,具体可以上网站查看。也可以使用双指针方法。
2024-01-31 21:59:36
289
1
原创 【代码随想录】Day 7 454.四数相加 383.赎金信 15.三数之和 18.四数之和
遍历两个数组相加,得到的数放到一个集合里,再遍历另外两个数组相加,判断数组里有没有我们想要的元素。元素数值可能很大,数组下标可能不够。遍历c+d的时候,查看0-(c+d)是否出现在map里面,如果出现了,加上0-(c+d) 键对应的值。运用双指针法要对数组进行排序,没有要求返回下标,所以可以排序。本题跟上一节有效字母异位词很像,异位词是两个字符串能不能互相组成,本题是单向。四数之和和三数之和一样,用双指针,再增加一层for循环。不一样,第一个式子会忽略有重复元素的元组,但是元组内部是允许有重复的。
2024-01-30 23:49:41
328
1
原创 【代码随想录】Day 5 242.有效的字母异位词 349.两个数组的交集 202.快乐数 1.两数之和
a-z的ASCII码是连续的,所有建立哈希数组。更好的时间复杂度,是先建立哈希表,然后再减,如果数组元素全为0,那么就是异位词。原本的想法:给字母s和t都建一个字典,两个字典每一个键值对都相等的话,就是异位词,如果不等,则不是。当我们需要快速判断一个元素是否出现在集合里面,需要使用哈希表(散列表)哈希值比较小,范围比较小的时候,范围可控用数组。注意最后一个return 是跟for循环对齐。本题用python语言集合解法很容易。key对应有value就用map。map用来存遍历过的元素。
2024-01-30 01:09:41
485
1
原创 【代码随想录】day 4 24.两两交换链表中的节点 19.删除链表的倒数第n个节点
cur要指向调换位置的前一个,时刻要清楚cur到底是指向哪里的。删除节点也要指向删除的前一个节点。还是采用虚拟头节点的方式。
2024-01-29 02:08:46
360
原创 【代码随想录】Day3 203.移除链表元素 707.设计链表 206.反转链表
链表不是很会,明天再复习一下基础知识。头节点与非头节点移除方法不一样。链表在内存中不是连续分布的。运用虚拟头节点来简化代码。
2024-01-27 00:40:19
345
原创 【代码随想录】Day 2 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵2
此处使用滑动窗口来书写,也是相当于两个指针。通俗地说,左侧的先固定,右侧的累加,大于目标值之后,记录长度。左侧的向右移动一位,原来累加值减去左侧移出去的值,右侧继续累加,重复以上操作。使用while不能使用if,因为不止判断一次。由于是非递减的数组,所以列表两端数的平方要大于列表中间,双指针分别指向头尾,比较大小之后向中间挪动。python中定义指定长度的列表 result = [默认初始值]*(列表长度)处理规则要统一,所有的都是左闭右开区间。还需要再琢磨一下,尤其是边界处。
2024-01-26 01:58:56
176
1
原创 【代码随想录】Day1 704.二分查找,27.移除元素
middle = (left + right)//2 与 middle =left+ (right-left)//2等同,但是前者可能溢出。2.循环判断条件,是等于还是小于等于(可以用区间是否合法辅助判断)更新区间的时候,边界是等于middle,还是等于middle-1。以上两点是相互关联的,边界怎么写根据区间定义来。并且确定区间开闭之后整个过程要一以贯之。快慢指针法,双指针法时间复杂度更有优势,快指针指向保留的元素,慢指针指向保留的下标。Day 1 好的开始是成功的一半~
2024-01-24 22:38:13
482
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅