随笔分类 - 数据结构
摘要:做一道拆点的图论题时,需要用到堆优化的dijkstra,其中的堆存的是一个struct(参数大于2,pair放不下) 因为堆会自动排序,所以struct需要重载运算符。 注意:这两个模板是为了达到小根堆的效果 模板写法: 写法1:大根堆+重载小于号,但是返回的时候要反一下(返回与重载运算符相异) s
阅读全文
摘要:获取set首个元素值的方法 作用:因为STLset有自动排序的功能,所以有时需要获取set的首元素作为字典序最小来进一步处理。 方法:在h.begin()前面加星号*即可获取set首个元素的值 set<char> h; cout << *h.begin(); 例题:字符串化繁为简 示例1 输入 ()
阅读全文
摘要:学习资料 1.B02 图的存储 2.图是如何存储的:BFS、DFS 3.算法讲解059【必备】建图、链式前向星 各种存图方式的区别 图片来自上述学习资料 这里主要推荐表格中的后两种存图方法,因为适用于各种图。 只有在需要对一个点的所有出边进行排序的场合下,使用vector存边排序更方便,其余情况ve
阅读全文
摘要:stod函数 将string转为double string t = s.substr(i, j - i); double num = stod(t); 例题:货币单位换算 样例1 输入 2 20CNY53fen 53HKD87cents 输出 6432 说明: 20元53分+53港元87港分,换算成
阅读全文
摘要:单个char转string char x = 'a'; string c = string(1, x); string转单个char string s = "abc"; char x = s[0]; string转char[](字符数组) string s = "abc"; s.c_str(); (
阅读全文
摘要:1.数据量较小时,可以用队列模拟 2.数据量较大时,需要使用递推公式 公式推导举例 找规律,举个例子 n = 5, m = 4, n下标从0开始,m下标从1开始 f[1] = 0; f[2] = (f[1] + a[4]) % i; f[3] = (f[2] + a[3]) % i; f[4] =
阅读全文
摘要:学习资料 1.单调队列 滑动窗口最大值【基础算法精讲 27】 2.E11【模板】单调队列 滑动窗口最值 3.算法讲解054【必备】单调队列-上 首先明确一点,队列中存的是下标,不是数组中的值,数组中的值是num[q[tt]]和num[q[hh]]。 三步走: 1.判断队头出窗口 在队列不空时,判断队
阅读全文
摘要:求解方法: 二叉树的最近公共祖先(Lowest Common Ancestor) 北邮考研机试题 求两结点之间的最短路径长度 视频讲解 #include <iostream> #include <algorithm> #include <cstring> using namespace std; c
阅读全文
摘要:判断某序列是否为BST的后序遍历 46. 二叉搜索树的后序遍历序列 class Solution { public: vector<int> seq; bool verifySequenceOfBST(vector<int> sequence) { seq = sequence; return df
阅读全文
摘要:3765. 表达式树 将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。 /** * Definition for a binary tree node. * struct TreeNode { * string val; * TreeNode *left; *
阅读全文
摘要:151. 表达式计算4 写法一: #include <iostream> #include <stack> #include <unordered_map> using namespace std; stack<char> op; stack<int> num; int qmi(int a, int
阅读全文
摘要:题单:LeetCode链表 2. 两数相加 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {
阅读全文
摘要:记录LeetCode 热题 HOT 100 代码 1. 两数之和 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hash; for(int i
阅读全文
摘要:AcWing PAT甲级树专题 1476. 数叶子结点 #include <iostream> #include <cstring> using namespace std; const int N = 110; int h[N], e[N], ne[N], idx; int n, m; int c
阅读全文
摘要:学习资料 1.单调栈知识 2.算法讲解052【必备】单调栈-上 口诀:大增小减,左从左到右,右从右到左 解释:找某个元素左边或右边第一个比它大的元素,构造单调递增栈,遍历顺序与前面左右相同,要找左边就从左到右遍历,要找右边就从右到左遍历; 找某个元素左边或右边第一个比它小的元素,构造单调递减栈,遍历
阅读全文
摘要:单链表 // head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点 int head, e[N], ne[N], idx; // 初始化 void init() { head = -1; idx = 0; } // 在链表头插入一个数a void in
阅读全文
摘要:Trie:高效地存储和查找字符串集合的数据结构 Trie树的存储 比如说要存储下面这些字符串 从根结点开始存 然后若一个结点是一个单词的末尾,则要打上一个标记,从根结点到该结点存在一个单词,图中用五角星表示标记。 这是Trie树的存储。 Trie树的查找 Trie树可以高效地查找某个单词是否出现过以
阅读全文