![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode 学习笔记(代码随想录笔记)
文章平均质量分 94
LeetCode 刷题笔记
许菠萝
不当牛马
展开
-
12.排序
1.排序理论[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iw9JbiQc-1644592461318)(/Users/xuguagua/Library/Application Support/typora-user-images/image-20220112160343390.png)]题目:2152.八大排序算法2.1_快速排序2.1.1 算法描述[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUtrPpcG-164459246原创 2022-02-12 23:16:26 · 211 阅读 · 0 评论 -
11.图论
1.基础知识对于图来说比较重要的就是图的深度遍历和图的广度遍历,下面是这两种遍历的基本思想1.深度遍历:这里可以用深度搜索遍历的原因是,深度优先搜索使用的数据结构是栈。我们先将出度为 0 的节点放入,而出度为 0 的节点是比较高级的课程,基础的课程后入栈那么也就先出S1:记录节点之间的映射关系key:父节点;value:该父节点指向的相邻节点比如:在课程中基础课程指向高级课程。有一个数据结构存储节点之间的关系,key :课程 ; value :该课程对应的高级课程其中图中的「白色」「黄色」「绿原创 2022-02-11 23:14:16 · 891 阅读 · 0 评论 -
10.动态规划
1.动态规划模板1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组1.1 动态规划和回溯的区别什么时候用动态规划,什么时候用回溯:如果一个题的答案是一个值,E.g. 3,true or false ,则用动态规划如果题目中有让列出所有结果的可能性:回溯1.2 动态规划和谈心的区别DP 和贪心的区别:DP : y i = f(yi-1) 根据上一个状态推断贪心:yi = f(yi) 通用的式子2.LeetC原创 2022-02-11 23:13:44 · 198 阅读 · 0 评论 -
9.贪心算法
2.LeetCode 相关题目2.1_455 分发饼干2.1.1 算法描述先对小孩和饼干数组记性排序,保证可以一个个的判断小孩:[1,2]饼干:[1,2,3]每次将最小的那一块饼干分给胃口最小的孩子,如果饼干足够则当前小孩满足,如果饼干不够则当前孩子不动,继续向前判断更大的那一块饼干是否满足单步解决方案:将当前最小的那块饼干给胃口最小的那个人2.1.2 C++ 代码实现class Solution {public: int findContentChildren(vector<原创 2022-02-11 23:13:05 · 447 阅读 · 0 评论 -
8.回溯算法
1.回溯法模板1.回溯函数模板返回值以及参数回溯函数名:backtracking返回值:一般为 void1.参数:难以确定,需要什么参数就填什么参数2.回溯函数终止条件3.回溯搜索的遍历过程模板void backtracking(参数) { // 参数中要有一个值控制树的深度 if (终止条件) { // 这里控制 for 循环是几重 for 循环,并返回上一层 for 循环 存放结果; return; } for (选择:本层集合原创 2022-02-11 23:12:30 · 639 阅读 · 1 评论 -
7.树相关
1.树1.1树的定义树是一种非线性数据结构,在某些时候非线性结构比线性结构处理数据时要快的多。1.2 树的应用场景1.2.1 Linux/Unix 文件夹与文件1.2.2 继承下图用树结构模拟的各类之间的继承关系1.2.3 树的抽象数据类型1.二叉树的定义struct TreeNode{ int val; TreeNode * left; TreeNode *right; TreeNode(int x):val(x),left(NULL),right(原创 2022-02-11 23:11:51 · 154 阅读 · 0 评论 -
6.栈和队列
1.栈 Stack1.1 栈的定义栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。 不像是set 或者map 提供迭代器iterator来遍历所有元素。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。1.2 栈的应用1.2.1括号和 HTML 匹配原创 2022-02-11 23:11:21 · 297 阅读 · 0 评论 -
5.双指针
1.对撞指针在头部和尾部分别设置一个指针,一个指针向后移动一个指针向前移动,如果指针对撞则停止循环1.1.LeetCode 相关习题2.LeetCode 题目2.1_27移除元素2.1.1 算法描述这个题是比较典型的快慢指针,一个赋值指针 i 一个赋值指针 j ,j 是不断向前移动的,只有当 j 满足某个条件后将 nums[j] 的值赋给 nums[i] i 才会移动2.1.2 代码实现class Solution { public: int removeElement(vecto原创 2022-02-11 23:10:50 · 7341 阅读 · 0 评论 -
4.字符串
1.字符串2.LeetCode 相关题目2.1_344反转字符串LeetCode题目链接2.1.1算法描述使用双指针翻转字符串可以与翻转链表进行对比学习2.1.2 Python 代码实现class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """原创 2022-02-11 23:10:18 · 536 阅读 · 0 评论 -
3.哈希表
1.哈希表基础 Hash Table1.映射映射的五大核心方法1.1 Hash Table 的定义哈希表是根据关键码的值而直接进行访问的数据结构。哈希表也可以被称作是散列表哈希表的底层实现是一个数组,哈希表是一个特殊的数组1.1.1 Hash Tabel 的映射在一个字典中,有了 Key 和 value 的值可以形成一个映射,可以先考虑一种有限制的设置,在这个设置中有 n 个元组,想要将这 n 个映射,就要定义一个比元组个数还要大的映射表用来表示这个映射,如下图所示:在上图的情况下,将键值原创 2022-02-11 23:09:47 · 1155 阅读 · 0 评论 -
2.链表相关
1.链表基础1.1数组和链表的优缺点数组缺点:①动态数组的长度也有可能超过实际存储数组元素所需的长度②在实时操作系统中对操作的摊销边界是不可接受的③一个数组内部执行插入和删除操作的代价太高链表缺点:没有办法随机存取1.2 链表定义链表是一种通过指针串联在一起的线性结构,每一个节点又有两部分组成,一个是数据域一个是指针域,最后一个指针域指向 Null1.3 链表的类型1.3.1 单链表定义:由多个节点集合共同构成一个线性序列,每个节点存储一个对象的引用,这个引用指向序列中的一个元素,即原创 2022-02-11 23:09:12 · 304 阅读 · 0 评论 -
1.数组相关
1.数组理论基础1.1 数组定义数组定义:一组相关变量能够一个接一个地存储在计算机存储器的一块连续区间内。我们将这样的表示法称为数组 array2.LeetCode 相关题目2.1_704二分查找LeetCode 链接二分模板2.1.1 算法思路二分查找思路:在 left+right 正常情况下 mid 是会偏左,所以如果想让 mid 偏右必须要进行 +1模板1:二分查找 mid 选取哪个值比较关键。如果说int mid = (left+right)/2; 那么分成的区间就是 [原创 2022-02-10 19:44:41 · 6178 阅读 · 0 评论