- 博客(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
114
转载 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
766
原创 IO多路复用
IO多路复用之epoll和select1、epoll简介:epool是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了
2020-11-09 22:15:42
112
原创 动态规划
动态规划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
118
原创 堆排序及其应用
堆排序及其应用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
859
原创 leetcode树相关题目
leetcode树相关题目## 标题递归加粗样式98.验证二叉搜索树二叉搜索树: 节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。该题目容易出错的地方:忽略了保持最小值和最大值,只比较每个节点和其左子节点、右子节点的关系了。应该每次递归右子树,更新最小值,每次递归左子树更新最大值。正确解法:```cpp class Solution {public: bool isValidBST(TreeNode* root
2020-07-11 17:03:40
193
原创 迪杰斯特拉(Dijkstra)算法
算法图相关的算法迪杰斯特拉(Dijkstra)算法迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。...
2019-10-08 19:51:10
222
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人