LeetCode 学习笔记(代码随想录笔记)
文章平均质量分 97
LeetCode 刷题笔记
许菠萝
不当牛马
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
12.排序
1.排序理论 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iw9JbiQc-1644592461318)(/Users/xuguagua/Library/Application Support/typora-user-images/image-20220112160343390.png)] 题目:215 2.八大排序算法 2.1_快速排序 2.1.1 算法描述 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUtrPpcG-164459246原创 2022-02-12 23:16:26 · 340 阅读 · 0 评论 -
11.图论
1.基础知识 对于图来说比较重要的就是图的深度遍历和图的广度遍历,下面是这两种遍历的基本思想 1.深度遍历: 这里可以用深度搜索遍历的原因是,深度优先搜索使用的数据结构是栈。我们先将出度为 0 的节点放入,而出度为 0 的节点是比较高级的课程,基础的课程后入栈那么也就先出 S1:记录节点之间的映射关系 key:父节点;value:该父节点指向的相邻节点 比如:在课程中基础课程指向高级课程。有一个数据结构存储节点之间的关系,key :课程 ; value :该课程对应的高级课程 其中图中的「白色」「黄色」「绿原创 2022-02-11 23:14:16 · 1196 阅读 · 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 · 353 阅读 · 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 · 572 阅读 · 0 评论 -
8.回溯算法
1.回溯法模板 1.回溯函数模板返回值以及参数 回溯函数名:backtracking 返回值:一般为 void 1.参数:难以确定,需要什么参数就填什么参数 2.回溯函数终止条件 3.回溯搜索的遍历过程 模板 void backtracking(参数) { // 参数中要有一个值控制树的深度 if (终止条件) { // 这里控制 for 循环是几重 for 循环,并返回上一层 for 循环 存放结果; return; } for (选择:本层集合原创 2022-02-11 23:12:30 · 1200 阅读 · 0 评论 -
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 · 322 阅读 · 0 评论 -
6.栈和队列
1.栈 Stack 1.1 栈的定义 栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。 不像是set 或者map 提供迭代器iterator来遍历所有元素。 栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。 所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。 1.2 栈的应用 1.2.1括号和 HTML 匹配原创 2022-02-11 23:11:21 · 439 阅读 · 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 · 7647 阅读 · 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 · 672 阅读 · 0 评论 -
3.哈希表
1.哈希表基础 Hash Table 1.映射 映射的五大核心方法 1.1 Hash Table 的定义 哈希表是根据关键码的值而直接进行访问的数据结构。哈希表也可以被称作是散列表 哈希表的底层实现是一个数组,哈希表是一个特殊的数组 1.1.1 Hash Tabel 的映射 在一个字典中,有了 Key 和 value 的值可以形成一个映射,可以先考虑一种有限制的设置,在这个设置中有 n 个元组,想要将这 n 个映射,就要定义一个比元组个数还要大的映射表用来表示这个映射,如下图所示: 在上图的情况下,将键值原创 2022-02-11 23:09:47 · 1337 阅读 · 0 评论 -
2.链表相关
1.链表基础 1.1数组和链表的优缺点 数组缺点: ①动态数组的长度也有可能超过实际存储数组元素所需的长度 ②在实时操作系统中对操作的摊销边界是不可接受的 ③一个数组内部执行插入和删除操作的代价太高 链表缺点: 没有办法随机存取 1.2 链表定义 链表是一种通过指针串联在一起的线性结构,每一个节点又有两部分组成,一个是数据域一个是指针域,最后一个指针域指向 Null 1.3 链表的类型 1.3.1 单链表 定义:由多个节点集合共同构成一个线性序列,每个节点存储一个对象的引用,这个引用指向序列中的一个元素,即原创 2022-02-11 23:09:12 · 475 阅读 · 0 评论 -
1.数组相关
1.数组理论基础 1.1 数组定义 数组定义:一组相关变量能够一个接一个地存储在计算机存储器的一块连续区间内。我们将这样的表示法称为数组 array 2.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 · 6318 阅读 · 0 评论
分享