
神操作
文章平均质量分 80
C+G
也就那样
展开
-
C/C++手撕哈希表详解
文章目录关于实现源码哈希表的理论知识哈希表的定义桶数组散列函数散列函数的构造扰动函数 和 按位与哈希冲突HashMap实现类型定义(键值对以及对应节点)哈希表的数据初始化方法(构造方法)根据散列函数得到位置put方法扩容方法get方法完整代码测试:LeetCode 1.两数之和总结关于实现源码实现源码仓库在线查看链接:C语言实现C++实现哈希表的理论知识哈希表的定义哈希表也叫散列表,我们先来看看哈希表的定义:哈希表是保存键值映射关系的查找表,通过关键字可以很快找到对应的值。简单说来说,原创 2021-11-26 14:51:41 · 7568 阅读 · 5 评论 -
从矩阵快速幂的泛型模板设计——教你如何优雅的面向对象
文章目录什么是矩阵快速幂?怎么进行矩阵快速幂的运算?为什么突然想写这个模板?题目我是如何被坑的语法陷阱(建议非C++党绕道)做题陷阱教你设计Matrix类如何设计一个类?类的具体抽象结构(代码的具体规划图)实现矩阵泛型模板类源代码实现使用方法一、 矩阵类的构造和初始化方式二、基本成员函数的使用三、解题验证总结什么是矩阵快速幂?关于快速幂,就是利用二进制进行求解某个数的幂的快速方法。后面会对快速幂的原理进行简单讲解,如果还是不懂,请自行百度。相信有很多小伙伴是初入大学的世界,可能还没学过线性代数(原创 2021-11-21 02:46:59 · 733 阅读 · 0 评论 -
来自上帝的骰子---Treap(树堆)详解
文章目录为什么说是上帝的骰子?Treap实现1. 结点的结构2. Treap的抽象数据结构3. 左旋和右旋4. 插入和删除5. 查询排名6. 按排名查询值7. 查询前驱后继8. 销毁Treap9. 迭代器的设计完整源代码Treap.hTreap.cpp测试AVL vs Treap vs 普通BST为什么说是上帝的骰子?解释这个问题,首先由这个数据结构的名字开始,Treap = Tree + Heap,即为树堆之意,然而实际上用到堆的地方就是利用了一个随机的值标记每个结点,然后根据这个值对树进行左旋、右原创 2021-10-16 00:45:35 · 207 阅读 · 0 评论 -
徒手写的AVL竟然比STL中的红黑树效率更高?✨
文章目录AVL树简介AVL树的相关概念AVL树的实现详解1. 结点结构2. AVL树的抽象数据结构(ADT)3. AVL树高度相关操作4. 得到子树中最大/最小结点5. 得到结点的前驱和后继6. AVL树失衡的调整7. 插入新结点8. 删除结点9. 查找元素10. 遍历二叉树11. AVL树的销毁12. 迭代器的设计完整代码AVLTree.hAVLTree.cpp测试测试代码测试总结解题测试AVL树简介AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。原创 2021-10-13 01:20:10 · 292 阅读 · 0 评论 -
新手实践小项目--大数加减类的实现(C++实现)✨
文章目录为什么需要大数加减类?大数加减类实现详解一、流程图总览二、成员数据和构造函数详解三、(算法核心)静态成员函数和运算符重载详解static Swap()static compare()static isEqual()(*核心算法)static add()(*核心算法)static minus()char &operator[]BigInteger &operator=bool operator<(*核心算法)BigInteger operator+(*核心算法)BigIntege原创 2021-10-08 01:16:07 · 795 阅读 · 0 评论 -
新手用C++写了个泛型堆,效率竟比STL的更快?
文章目录关于为什么突然想写一个模板类?对刚用模板的C++新手而言的几大坑点习惯性写.h和.cpp文件对模板特化运用和理解很少我的Heap实现总览Heap类一、 成员变量二、 静态成员函数三、类的内部成员函数(放源代码详解)关于堆化函数的实现关于所用模板的说明整合所有代码,实现Heap类模板我的Heap测试正确性测试(与STL priority_queue对比)效率测试(与STL priority_queue对比)解题实测(LeetCode 347. 前 K 个高频元素)总结关于为什么突然想写一个模板类?原创 2021-10-03 02:44:13 · 601 阅读 · 0 评论 -
Socket基本操作的C++封装--以及Socket通信实践
文章目录接口类的实现(抽象类)_public_socket.hTCP_INTERFACE.h(作用于win平台)服务器端封装TCP_SOCKET_SERVER.hTCP_SOCKET_SERVER.cpp客户端的封装TCP_SOCKET_CLIENT.hTCP_SOCKET_CLIENT.cpp实例一:回声程序通信服务器回声程序客户端通信程序打印的结果:实例二:文件操作,传送图片(掌握重复传包)分析待传图片发送端程序接收端程序接收结果接口类的实现(抽象类)_public_socket.h该头文件用于原创 2021-08-18 00:25:29 · 2475 阅读 · 1 评论 -
拓扑排序详解
拓扑排序之 Kahn 算法大家在上大学的时候,应该都遇到过这样的情况,有些高级的课程需要你先完成基础课程后才可以学习。在「图1. 课程关系图」中,如果你想选课程 C,那你需要先完成课程 B,如果你想选课程 B,那么你需要先完成课程 A。大学四年的课程还是非常多的,你总不希望等到大四了,想去修一门高级的课程,结果发现自己并没有完成基础课程,最终导致自己无法学习这门高级课程。那么你应当如何合理的安排自己的课程呢?如何才能理清课程关系呢?此时,就需要「拓扑排序」的帮忙了。「拓扑排序」针对的是 有向无环图 的原创 2021-08-08 14:42:09 · 360 阅读 · 0 评论 -
dp解决同时找两条最大路径和问题--蓝桥杯传纸条
文章目录题目题目解析解题代码题目题目解析读完这道题,我们很快能想起dp求最大路径和,然而这是要同时找到两条路径,还不带重样的,这怎么办呢?我们很快想到:同时维护两个位置的dp,每个位置的dp代表起点到达该位置的最大路径和。图解:题目也确实就是这样解开的,那么问题又出现了,如何保证这两条路径不是同一个路径呢?我们需要维护一个四维数组,该数组记录起点到达两个位置的最佳答案,在进行更新时我们不更新除到达终点外的任意两个位置相同的情况,因为一旦把这种情况进行更新,那在到达真正终点的中间过程原创 2021-07-28 19:06:43 · 608 阅读 · 0 评论 -
已知一序列无重复元素,对LCS通过LIS进行优化
文章目录题目题目解析具体代码实现题目题目解析看完题目,我们可以发现,只需要寻找到两个数组直接的最长公共子序列(LCS),便可知最少操作次数。所以毫不犹豫的写下了 O(n^2) 级别的 LCS 代码,然后毫不夸张的栈溢出了(毕竟是困难题总得想办法优化class Solution {public: int minOperations(vector<int> &target, vector<int> &arr) { int m原创 2021-07-28 00:21:15 · 145 阅读 · 0 评论 -
关于如何理解和运用C语言的指针,我有话说(以C++内的纯C风格解题代讲)
文章目录使用指针时的两点以题代讲解题代码使用指针时的两点想写好纯C风格的代码,那指针肯定少不了。。纯C风格对数组的函数可编程性操作,只能用指针这玩意,而使用指针的方式一般要注意以下几点:注意指针指向的是谁,这方面以防一些憨憨直接用 int** 指针来接二维数组的首地址来操作,由于二级指针指向的是一级指针 int* 所以,每次加法运算时加的是一个int*的大小,而指针的大小都是4字节,而二维数组实际上需要加上 int[col] 类型长度,所以使用二级指针前,请先使用一级指针数组把行的首地址存原创 2021-07-20 17:05:32 · 139 阅读 · 1 评论 -
「ICPC World Finals 2017」色调分离 Posterize --区间dp关系递推
文章目录题目题目分析解题代码题目oj平台题目分析该题是需要我们按要求把给出的颜色种类用 k 种颜色进行替换,输出这种情况的最小误差值。那么我们很快能想清楚一般情况:当 k==d 那么显然不需要更改原像素类型,误差是为 0 的。当 k==1 时,我们可以直接枚举计算出最小误差。再次经过仔细斟酌,你会发现如果假设给出的颜色种类值的大小是有序排列的,那么为了使得误差最小,被替换为同一种颜色值的原像素的色调值肯定也是挨在一起的,例如原像素值为 1 25 46,需要替换为 k = 2 种像原创 2021-07-19 20:39:56 · 642 阅读 · 1 评论 -
最长递增子序列(LIS) 贪心+二分详解O(nlogn)
文章目录从递增的三元序列引进贪心题目O(N)贪心解法最长递增子序列(LIS)的贪心+二分解法题目贪心+二分详解从递增的三元序列引进贪心题目oj平台O(N)贪心解法这种O(n)的方法妙处在于:我们不需要关心这三个数字的相对位置,只管更新长度为1、2的递增序列的结尾的最小数字,一旦遇上比长度为2的最小结尾数字要大的,则必出现递增的三元递增序列。class Solution {public: bool increasingTriplet(vector<int>& nu原创 2021-07-18 14:26:59 · 1402 阅读 · 1 评论 -
有穷状态自动机--一层循环迭代实现二叉树的前中后序遍历(对面试官降维打击)
状态机过程详解我们定义三个状态:LEFT状态:代表左右子树均未被遍历RIGHT状态:代表左子树被遍历UP状态:代表左右子树都被遍历过注意还需要一个栈用于存储遍历路径,方便拿取父节点。实现了这个迭代过程后,我们发现,实际上LEFT状态就是前序遍历的操作状态,RIGHT状态就是中序遍历的操作状态,UP状态就是后序遍历的操作状态,自此用迭代实现了递归的完全模拟!!!画出状态转移图(前序遍历代码)代码 //定义三种状态, //LEFT状态代表左右子树均未被遍历 //RIG原创 2021-07-15 23:47:46 · 538 阅读 · 3 评论