C++
文章平均质量分 78
C++只是详解+OJ题
玲娜贝儿~
持续输出学习笔记~
展开
-
【C++】-- 哈希应用之布隆过滤器
布隆过滤器是一种紧凑的、巧妙的概率型数据结构,能够高效插入查询,来判断一个元素在或不在,用多个哈希函数,把一个数据映射到位图中,不仅能提高查询效率,还能节省空间原创 2022-10-02 06:00:00 · 1801 阅读 · 16 评论 -
【C++】-- STL之位图
位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在原创 2022-09-27 06:00:00 · 2190 阅读 · 16 评论 -
【C++】-- STL之用哈希桶模拟实现unordered_set和unordered_map
用哈希桶封装实现unordered_set和unordered_map,就要考虑到他们传给哈系统的数据元素不同,unordered_set传给哈希桶的是k,unordered_map传给哈希桶的是pair,那么哈希桶面对这两种不同的数据,如何做到统一处理呢?面对unordered_set传给哈希桶的是k,unordered_map传给哈希桶的是pair,就把K和V统一封装成T,用T代替pair:原创 2022-09-23 06:00:00 · 829 阅读 · 23 评论 -
【C++】-- 哈希算法
如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的key之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。向该结构中插入元素和查找元素时:插入元素:将元素key存放到用hashFunc计算出的元素key的位置。查找元素:对元素的key进行计算,把用hashFunc计算的函数值当做元素的存储位置,在哈希结构中按此位置取元素比较,若key相等,则查找成功。原创 2022-09-20 17:09:58 · 5882 阅读 · 28 评论 -
【C++】-- STL之unordered_map/unordered_set详解
STL有两种容器:序列式容器和关联式容器,序列式容器vetor/lost/deque,用来存储数据。关联式容器map/set/unordered_map/unordered_set用来存储数据+查找数据。unordered_map和unordered_set是c++里面两个提供哈希表的容器,map和set底层是红黑树,unordered_map和unordered_set的底层是哈希表(散列表),是一种映射。原创 2022-09-13 17:47:11 · 2452 阅读 · 14 评论 -
【C++】-- STL之用红黑树模拟实现map和set
用红黑树同时封装出set和map时,set传给value的是一个value,map传给value的是一个pair,set和map传给红黑树的value决定了这棵树里面存的节点值类型。上层容器不同,底层红黑树的Key和T也不同。原创 2022-09-08 17:12:19 · 1113 阅读 · 24 评论 -
【C++】-- 红黑树详解
红黑树也是一种二叉搜索树,在每个结点上增加一个存储位,来表示该节点的颜色,节点要么是红色要么是黑色。满足以下性质:(1)每个结点不是红色就是黑色(2)根节点是黑色的(3)没有连续的红色节点(4)每条路径上都包含相同数目的黑色节点原创 2022-09-06 10:56:20 · 1405 阅读 · 12 评论 -
【C++】-- AVL树详解
一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:(1)它的左右子树都是AVL树(2)左右子树高度之差(简称平衡因子=右子树高度-左子树高度)的绝对值不超过1(-1/0/1)原创 2022-08-31 15:58:55 · 2508 阅读 · 42 评论 -
【LeetCode】-- 692. 前K个高频单词
给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序排序。原创 2022-08-29 10:59:48 · 266 阅读 · 20 评论 -
【C++】-- STL之map和set详解
关联式容器也是用来存储数据的, 不过里面存储的是键值对,数据检索时,效率比序列式容器高。STL有两种关联式容器:树形结构和哈希结构。树形结构的关联式容器有4种:set、map 、multiset、mapltimap,它们的底层都是平衡搜索树(红黑树)。...原创 2022-08-26 09:54:23 · 1151 阅读 · 16 评论 -
【LeetCode】-- 105. 从前序与中序遍历序列构造二叉树
给定两个整数数组preorder 和 inorder,其中preorder 是二叉树的先序遍历, inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。原创 2022-08-20 09:49:50 · 496 阅读 · 27 评论 -
【LeetCode】-- 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。原创 2022-08-18 11:28:38 · 446 阅读 · 6 评论 -
【LeetCode】-- 145. 二叉树的后序遍历
给你一棵二叉树的根节点root,返回其节点值的后序遍历。原创 2022-08-16 23:54:07 · 174 阅读 · 17 评论 -
【LeetCode】-- 94. 二叉树的中序遍历
给定一个二叉树的根节点root,返回它的中序遍历原创 2022-08-15 10:30:00 · 136 阅读 · 18 评论 -
【LeetCode】-- 144. 二叉树的前序遍历
给你二叉树的根节点root,返回它节点值的前序遍历。原创 2022-08-14 10:00:00 · 681 阅读 · 4 评论 -
【LeetCode】-- 236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”............原创 2022-08-13 07:30:00 · 217 阅读 · 7 评论 -
【LeetCode】-- 107. 二叉树的层序遍历 II
给你二叉树的根节点root,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)原创 2022-08-12 09:15:00 · 186 阅读 · 10 评论 -
【LeetCode】-- 606. 根据二叉树创建字符串
给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。......原创 2022-08-11 10:15:00 · 257 阅读 · 10 评论 -
【C++】-- 搜索二叉树
二叉搜索树也叫做二叉排序树,它要么是一棵空树,要么具有以下性质:(1)若它的左子树不为空,则左子树上所有节点的值都小于根节点的值(2)若它的右子树不为空,则右子树上所有节点的值都大于根节点的值(3)它的左右子树也分别为二叉搜索树......原创 2022-08-09 19:54:20 · 4827 阅读 · 23 评论 -
【C++】-- 多态
动态多态是指不同类型对象完成一件事的时候产生的动作不一样,那么结果也不一样。在继承中要构成多态有两个条件,缺一不可:(1)必须通过父类的指针或者引用调用虚函数(2)被调用的函数必须是虚函数,且子类必须对父类的虚函数进行重写动态多态父类指针或引用的指向:(1)父类指针或引用指向父类,调用的就是父类虚函数(2)父类指针或引用指向哪个子类,调用的就是哪个子类重写的虚函数根据切片规则,父类的指针既可以指向父类,又可以指向子类,如果有多个子类,就可以指向不同类型。............原创 2022-08-01 08:46:11 · 2061 阅读 · 32 评论 -
【C++】-- 继承
继承机制是面向对象程序设计使代码可以复用的最重要的手段,该机制自动地为一个类提供来自另一个类的操作和数据结构。只需要在新类中定义已有的类中没有的成分来建立一个新类。继承是类设计层次的复用。...原创 2022-07-26 17:27:35 · 1971 阅读 · 22 评论 -
【C++】-- IO流
输入输出缓冲区的作用:(1) 可以屏蔽低级IO的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差异,可以很容易写出可移植的程序。(2)可以使这部分的内容实现“行”读取的行为,对于计算机而言是没有“行”这个概念,有了这部分,就可以 定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。........................原创 2022-07-10 23:27:10 · 831 阅读 · 52 评论 -
【C++】-- 模板进阶
有时候,编译默认函数模板或者类模板不能正确处理需要的逻辑,需要针对指定类型进行特殊化处理,就要做模板的特化。模板的特化是在原有模板的基础上,针对特殊类型,所进行特殊化的实现方式。模板特化分为函数模板特化和类模板特化。函数模板特化的步骤:(1)必须有基础模板函数(2)template后面跟一对空的尖括号(3)函数名后跟一对尖括号,用来指定特化的类型(4)函数形参表:必须要和模板函数的基础参数类型完全相同,否则编译器报错。.........原创 2022-06-21 16:05:07 · 753 阅读 · 53 评论 -
【C++】-- STL容器适配器之priority_queue
priority_queue即优先级队列,是一种容器适配器,最大元素放在第一个。底层用堆实现,默认是大堆,因为默认大的优先级高,可随时插入元素,可快速查找最大元素,即优先级队列中第一个元素。优先级队列元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问...原创 2022-06-18 14:39:08 · 2482 阅读 · 46 评论 -
【C++】-- STL容器适配器之底层deque浅析
在【C++】-- STL容器适配器之stack一文中介绍了容器适配器的概念,容器适配器是一个封装了序列容器的类模板,对容器进行了转换,转换成栈的后进先出和队列的先进先出的等模板。虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque作为容器:那么deque到底是什么呢?有什么优势使得stack和queue都以它作为底层默认容器,对它进行包装原创 2022-06-17 13:34:13 · 2080 阅读 · 14 评论 -
【LeetCode】-- 102. 二叉树的层序遍历
给你二叉树的根节点root,返回其节点值的层序遍历。 (即逐层地,从左到右访问所有节点)。原创 2022-06-17 09:10:21 · 545 阅读 · 22 评论 -
【LeetCode】-- 225. 用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。......原创 2022-06-16 10:18:53 · 168 阅读 · 16 评论 -
【LeetCode】-- 150. 逆波兰表达式求值
根据逆波兰表示法,求表达式的值。有效的算符包括+、-、*、/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意:两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。...原创 2022-06-13 23:21:02 · 160 阅读 · 7 评论 -
【LeetCode】-- 剑指 Offer 31. 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。...............原创 2022-06-13 12:57:22 · 190 阅读 · 10 评论 -
【C++】-- STL容器适配器之queue
(1)队列是一种容器适配器,容器适配器即将特定容器类封装作为其底层容器类,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端删除元素。(2) 队列作为容器适配器实现,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。(3)底层容器可以是标准容器类模板之一,如可用vector、list可以作为底层容器类,也可以是其他专门设计的容器类,。该底层容器应至少支持以下操作: empty:检测队列是否为空 size:返回队列中有效元原创 2022-06-13 10:00:00 · 973 阅读 · 10 评论 -
【LeetCode】-- 15.最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。......原创 2022-06-14 10:00:00 · 251 阅读 · 27 评论 -
【C++】-- STL容器适配器之stack
stack是作为容器适配器被实现的,容器适配器即是对特定类封装将其作为底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层,元素从特定容器的尾部(即栈顶)被压入和弹出。.........原创 2022-06-12 07:30:00 · 766 阅读 · 18 评论 -
【LeetCode】-- 剑指 Offer 42. 连续子数组的最大和
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。原创 2022-06-11 07:30:00 · 302 阅读 · 8 评论 -
【LeetCode】-- 17.电话号码的字母组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同),注意 1 不对应任何字母原创 2022-06-10 07:30:00 · 796 阅读 · 10 评论 -
【C++】-- STL之list模拟实现
list链表的模拟实现,与前面的string和vector相比,略复杂一点:(1)由于链表节点本身就是一个结构体,包含数据域、指针域。 将节点的相关操作放入节点类进行处理,逻辑更清晰(2)string和vector的元素在空间上是连续分布的,迭代器++就能指向下一个元素,但list的迭代器不行,它的每个元素在空间上都不连续,要访问下一个节点必须找到当前节点的next,因此list的迭代器必须重写............原创 2022-06-09 07:30:00 · 1793 阅读 · 29 评论 -
【C++】-- STL之list详解
list有如下特征:(1)优点:可在任意位置插入删除元素,插入删除元素效率高(2)底层是双向链表,因此list可以前后双向迭代,通过指针连接前后节点。forward_list是单链表,只能向前迭代(3)缺点:不支持任意位置随机访问;需要额外空间保存前后节点信息......原创 2022-06-06 19:00:58 · 1722 阅读 · 26 评论 -
【LeetCode】-- 136.只出现一次的数字
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。当数组中的所有元素都一起异或,那么出现两次的元素都被异或成了0,最后的结果就是只出现一次的元素原创 2022-05-25 22:07:30 · 129 阅读 · 4 评论 -
【C++】-- 类和对象
C语言中,结构体中只能定义变量,在C++中,类是一个类型,由两部分构成:(1)成员变量(属性)(2)成员函数(行为)C++中的struct兼容C的所有用法,同时C++中把struct升级成类。原创 2022-04-08 20:02:15 · 756 阅读 · 3 评论 -
【C++】-- 引用
引用:给已经存在的变量取一个别名,并不是定义一个新变量。编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。原创 2022-04-07 21:21:24 · 1339 阅读 · 7 评论 -
【C++】-- 命名空间、函数重载、内联函数
一、命名空间C++中存在大量的变量、函数和类,都存在于全局作用域中,会导致冲突。使用命名空间可以对标识符的名称进行本地化,来避免命名冲突或名字污染,达到名称隔离的目的。原创 2022-04-06 23:51:56 · 3745 阅读 · 6 评论