- 博客(11)
- 收藏
- 关注
原创 代码随想录训练营第十三天 | Leetcode 239 滑动窗口最大值、Leetcode 347 前 K 个高频元素、栈与队列总结
Leetcode 239 滑动窗口最大值Leetcode 239 滑动窗口最大值第一想法:暴力解题,每次重新遍历滑窗内的每个数字,找到最大值返回。可以使用单向队列,储存当前可能成为最大值的数,并保证最大值始终在队列最前面。还得再多看看!
2024-01-18 21:02:17
431
1
原创 代码随想录训练营第十一天 | Leetcode 20 有效的括号、Leetcode 1047 删除字符串中的所有相邻重复项、Leetcode 150 逆波兰表达式求值
遇到数字先存数到栈里面,然后遇到了符号之后,找到其对应操作要用到的数字,也就是当前栈顶的两个数字,先pop出来,要注意顺序,然后计算结果,将计算得到的结果push入栈,重复以上操作,直到栈为空。借助一个栈,从前往后遍历这个字符串,如果当前字符和栈里面的第一个字符内容相等,栈里面的内容就弹出,不同就入栈,最后栈里面剩下的就是无重复的内容,然后将其按顺序保存在一个数组里面,然后数组转成字符串输出。如果栈不够,说明右括号多了;编译器在 词法分析的过程中处理括号、花括号等这个符号的逻辑,是使用了栈这种数据结构。
2024-01-17 20:54:10
401
原创 代码随想录训练营第十天 | 栈与队列理论基础、Leetcode 232 用栈实现队列、Leetcode 225 用队列实现栈
除了队列之外,还有双端队列这种数据结构,双端队列允许在队列的两端(前端和后端)都能进行插入(添加元素)和删除(移除元素)操作,结合了队列(先进先出,FIFO)和栈(后进先出,LIFO)的特性,因此。利用两个栈实现队列,先将数据存入一个栈,然后从这个栈中pop出所有数据存入另一个栈,然后再将数据pop出这个栈就可以实现先进先出。将前面的数据存入一个新的队列,直到目标数据成为队列的第一个数据。沿用前面的思路使用两个队列实现栈,是无用的,因为队列先进先出,不论用多少个队列,队列中数据的顺序依旧没有发生改变。
2024-01-16 20:43:08
871
1
原创 代码随想录第九天 | Leetcode 28 实现 strStr()、Leetcode 459 重复的子字符串、字符串总结、双指针回顾
Leetcode 28 实现 strStr()最长相等前后缀的长度的求解函数不是很能理解,之后得看看。
2024-01-15 23:24:00
430
原创 代码随想录第八天 | Leetcode 344 反转字符串 、Leetcode 541 反转字符串II、卡码网 54 替换数字 、Leetcode 151 翻转字符串里单词、卡码网 55 右旋转字符串
将字符串按长度2k进行分组,除了最后一组外,其它的组处理方式相同,均是找到改组中第一个数字和第k个数字,然后利用双指针进行交换;关键在于要从后往前填充,可以降低时间复杂度,因为从前往后的话,还要移动之后的内容,为当前的替换内容留出空间(在不创建新数组的情况下)。第一想法:用双指针法,设置头尾两个指针,交换头尾两个指针的内容,然后两个指针向中间移动,直到相交为止。第一想法:创建一个新的字符串记录结果,因为长度发生了变化,当前字符串从前往后遍历,如果是数字就替换成number。第一想法:没什么想法。
2024-01-11 00:15:38
462
原创 代码随想录算法训练营第七天 | Leetcode 454 四数相加 II 、Leetcode 383 赎金信、Leetcode 15 三数之和 、Leetcode 18 四数之和
Leetcode 15 三数之和Leetcode 18 四数之和。
2024-01-09 23:06:25
478
原创 代码随想录算法训练营第六天 | 哈希表理论基础 、Leetcode 242 有效的字母异位词、349 两个数组的交集、202 快乐数、1 两数之和
哈希表是根据关键码的值而直接进行访问的数据结构。(简单来说就是一个数组,数组的索引下标就是所说的关键码)
2024-01-08 15:30:44
840
原创 代码随想录算法训练营第四天 | Leetcode 24 两两交换链表中的节点 、Leetcode 19 删除链表的倒数第N个节点 、面试题 02.07 链表相交 、Leetcode 142 环形链表
第一想法:两个两个为一组,然后使用两个临时指针cur和pre,再用另外一个临时指针记录cur的后一个节点,然后改变cur和pre下一个节点的指向,然后再移动cur和pre的位置,但总是出错,另外奇数个节点和偶数个节点要分开考虑吗?妙啊,可以使用一次循环遍历求解,利用两个临时指针,通过合理设置两个临时指针之间的间隔,是快指针指到链表结尾的时候慢指针刚好指到要删除节点的前一个位置。移动完成之后链表的位置,cur依旧指向下次要交换的两个节点的前一个节点,因此是移动到交换后节点1的位置上。第一想法:双重循环?
2024-01-05 15:01:36
956
1
原创 代码随想录算法训练营第三天 | 链表理论基础 、Leetcode 203 移除链表元素、Leetcode 707 设计链表、Leetcode 206 反转链表
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是。
2024-01-02 23:55:39
600
1
原创 代码随想录算法训练营第二天 | Leetcode 977 有序数组的平方 、Leetcode 209 长度最小的子数组、Leetcode 59 螺旋矩阵II
第一想法:先按题目要求平方,然后按照冒泡排序进行升序排序考虑到数组是有序的,有负数的存在,因此最大值可能出现在两边,因此可以考虑使用双指针的方式设置左右两个指针,向中间移动,另外设置一个新数组,记录排序结果,直到指针移到中间重合为止。
2023-12-28 23:34:33
397
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人