- 博客(9)
- 收藏
- 关注
原创 图相关算法
图算法 1、深度优先遍历 void DFS(vector<int> a) { int n = a.size(); vector<int> visit(n); for (int i = 0; i < n; ++i) { if (visit[i] == 0) { //判断是否访问过 DFSVisit(i); } } } void DFSVisit(int u, vector<int>& visit) {
2020-12-06 20:47:09
136
转载 C++新特性
1、make_shared与new 初始化智能指针优先使用make_shared替代new。参考 考虑下面直接使用new的代码: std::shared_ptr spw(new Widget); 很明显这段代码需要分配内存,但是它实际上要分配两次。第一次:给Widget分配内存,第二次:由于每个std::shared_ptr都指向一个控制块,控制块包含被指向对象的引用计数以及其他东西。这个控制块的内存是在std::shared_ptr的构造函数中分配的。因此直接使用new,需要一块内存分配给Widge
2020-11-16 16:50:39
863
原创 IO多路复用
IO多路复用之epoll和select 1、epoll简介: epool是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了
2020-11-09 22:15:42
135
原创 动态规划
动态规划 1、步骤: ①状态定义 ②状态转移方程 ③状态初始化 ④计算最优解 2、leetcode中相关题目: 63.股票的最大利润:该题题解 首先进行状态定义:dp[i]表示以 prices[i] 为结尾的子数组的最大利润(以下简称为 前 i 日的最大利润 )。 状态转移方程:前 i 日最大利润 dp[i] 等于前 i - 1日最大利润 dp[i-1]和第 i 日卖出的最大利润中的最大值。 前 i 日最大利润 = max(前 (i-1) 日最大利润, 第 i 日价格 - 前 i 日
2020-11-08 21:14:37
137
原创 堆排序及其应用
堆排序及其应用 1、大顶堆和小顶堆 堆是具有下列特征的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于都等于其左右孩子结点的值,称为小顶堆。 结点之间的关系:大顶堆:a[n] >= a[2 * n] && a[n] >= a[2 * n + 1];小顶堆:a[n] <= a[2 * n] && a[n] <= a[2 * n + 1] 2、堆排序 由于堆中结点之间满足的关系,因此可以直接利用数组的下标对其
2020-08-09 16:46:36
903
原创 leetcode树相关题目
leetcode树相关题目## 标题 递归加粗样式 98.验证二叉搜索树 二叉搜索树: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 该题目容易出错的地方:忽略了保持最小值和最大值,只比较每个节点和其左子节点、右子节点的关系了。应该每次递归右子树,更新最小值,每次递归左子树更新最大值。 正确解法: ```cpp class Solution { public: bool isValidBST(TreeNode* root
2020-07-11 17:03:40
251
原创 迪杰斯特拉(Dijkstra)算法
算法 图相关的算法 迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 ...
2019-10-08 19:51:10
245
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人