- 博客(9)
- 收藏
- 关注
原创 剑指Offer学习记录——(七)队列
第七章学习了与队列有关的知识和面试题。队列的核心特点是“先进先出”(“后进后出”),故当我们在解题时发现存放数据的容器需要这种特点的访问时,就要想到使用队列。滑动窗口在解决线性表的部分问题时可以将时间复杂度降到,而其特点就是“先进先出”(“后进后出”),因此可以考虑使用队列实现滑动窗口。
2025-02-23 22:35:06
683
原创 剑指Offer学习记录——(六)栈
第六章学习了与栈有关的知识和面试题。栈的核心特点是“先进后出”(“后进先出”),故当我们在解题时发现存放数据的容器需要这种特点的访问时,就要想到使用栈。C++的stack容器的入栈、出栈、获取栈顶元素、判空和获取栈大小这5种函数的时间复杂度都是。因此,即使某些循环是嵌套循环,但最内层函数体内是栈的操作函数,那么整个循环的时间复杂度可能是,这时要用到均摊分析。单调栈是一种特殊的栈,是一种常见的解题技巧。典型的使用场景是求下一个更大元素(前一个更小元素)和确定区间的边界。
2025-02-18 17:15:18
821
原创 剑指Offer学习记录——(五)哈希表
第五章学习了有关哈希表的知识与面试题。哈希表的插入、删除和访问的时间复杂度都是,非常高效,因此面试经常会使用到它。基于哈希表和其他数据结构,可以设计出许多更高效复杂的数据结构,比如LRUCache。如果哈希表的键的取值有限,那么可以用数组替代哈希表。这样写的代码更简洁。而且在需要排序的场景中,由于数组的下标本身就有序,所以在遍历给数组写值时,就已经排了序。将时间复杂度从直接降为。哈希表经常用来记录字符出现的次数、位置等信息。
2025-02-15 12:02:29
1523
原创 剑指Offer学习记录——(四)链表
第四章学习了与链表有关的知识和面试题。数组、字符串的访问时间复杂度是,移动删除元素的时间复杂度是。链表的访问时间复杂度是,移动删除元素的时间复杂度是。使用哨兵节点可以简化链表的一些操作。面试遇见的链表一般是单向链表,倘若从链表的尾节点向头节点遍历容易解决问题,那就可以尝试反转链表。快慢双指针可以判断链表中是否有环、求环中节点与链表的中点。前后双指针可以求链表的倒数第个节点。处理链表节点的插入、删除、反转等问题时,尤其注意当前节点、前继节点与后继节点这三个节点。
2025-02-05 20:57:48
1688
原创 vscode启用C/C++扩展的功能
step2 禁用clangd这些类似功能的扩展,避免冲突(如果没有下载启用clangd则跳过)从而启用C/C++的intelliSense引擎。step1 下载且启用C/C++扩展。
2025-01-25 12:47:15
357
原创 剑指Offer学习记录——(三)字符串
第三章学习了有关字符串、双指针、回文字符串有关的知识与面试题。字符串本质是一个字符数组,所以字符串和数组本质相同,能用在一个上面的方法,肯定能用在另一个上面,二者是互通的。遇见连续子字符串就要想到同向双指针法,遇见统计字符出现次数就要想到哈希表。统计字符出现次数可以有多种表述形式,可以是变位词、不含重复字符的子字符串、包含所有字符的子字符串、两字符串是否相同等等。遇见统计字符出现次数就要想到哈希表,而在遍历哈希表时,可以是全部遍历,也可以使用标记来提前结束遍历哈希表,从而提高效率。
2025-01-24 11:02:02
959
原创 剑指Offer学习记录——(二)数组
第二章学习了有关数组、双指针、前缀和有关的知识与面试题。数组访问的时间复杂度是,因为一般来说数组元素在内存中的地址是连续的。双指针是一个重要的解题方法。有同向与异向之分。同向适合子数组的和或乘积的问题,但对元素有一定要求,比如元素是正整数。异向适合几数之和的问题,但对数组也有要求,比如数组是排序的。前缀和可以用在一维数组,也可以用在矩阵中,它可以解决子数组的和的问题。它对数组的要求没有双指针那么严格。它可能需要和哈希表结合起来使用,但基本上都需要进行预处理。
2025-01-19 20:16:15
656
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1