上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 28 下一页
摘要: Trie树可以用来存储前缀字符串/数组。 可以用数组进行模拟 son[N][26] 记录节点的son cnt[N] 记录以当前节点为最后字符的字符串出现的次数 idx当前用到的节点 例题 143. 最大异或对 #include<iostream> using namespace std; const 阅读全文
posted @ 2021-12-19 18:51 80k 阅读(78) 评论(0) 推荐(0)
摘要: 侯捷C++ static成员变量静态成员变量必须在类外初始化(定义)。这样可以保证static成员变量只被初始化一次。 模板函数作为模板类的友元时,声明也要加template<T> 阅读全文
posted @ 2021-12-12 21:18 80k 阅读(59) 评论(0) 推荐(0)
摘要: KMP用于o(n)的字符串匹配。 使用next数组记录以当前阶段为后缀的,和以开始位置为前缀匹配的最长长度,即匹配过程中进行后移后保留的长度。 next数组的计算和匹配过程类似。 推荐数组从1开始计数 注意,自身match时,是不包含当前位置的前缀,而互相match时,是包含当前位置的前缀,所以两次 阅读全文
posted @ 2021-12-12 15:40 80k 阅读(120) 评论(0) 推荐(0)
摘要: 可以用数组直观的模拟栈和队列,栈记录栈顶位置,队列记录头和尾。 单调栈和单调队列可以用来记录有单调性的数据,当插入新数据时,将违反单调性的数据删去,保持单调。 可以查找,距离最近的小于当前数据的位置,以及滑动窗口内的极值。 阅读全文
posted @ 2021-12-12 14:29 80k 阅读(40) 评论(0) 推荐(0)
摘要: 链表一般不用结构体创建(new的使用很慢) 而是用邻接表进行表示 两个数组分别e[]和ne[]分别记录节点的值和下一个节点的编号 head记录头结点指向的位置,idx表示当前可以使用的节点 用数组模拟链表时,删除链表无法释放内存,但是运行速度快。 双链表则用e[]和l[]和r[]记录; 可以将单链表 阅读全文
posted @ 2021-12-12 10:50 80k 阅读(65) 评论(0) 推荐(0)
摘要: 用于数据范围大但稀疏的数据 unique可以用来去重; unique(v.begin(),v.end()); 返回值指向最后一个无重复元素的下一位; 可以用 v.erase(unique(v.begin(),v.end()),v.end())去除有序数组中的重复元素。 对有序无重复数组,查找可以使用 阅读全文
posted @ 2021-12-11 10:50 80k 阅读(75) 评论(0) 推荐(0)
摘要: x&(-x)可以取得x的最后一位1. x&(x-1)可以去掉x的最后一位1. 阅读全文
posted @ 2021-12-11 10:44 80k 阅读(38) 评论(0) 推荐(0)
摘要: 前缀和可以快速求部分和有一维和二维的实现。数组的下标最好从1开始前缀和下标从0开始,以统一求a1~ai时的接口 差分主要用于对某个区间同时进行加减前缀和的逆运算可以用o(n)的时间恢复原数组d[i]=a[i]-a[i-1];AcWing 797. 差分#include<iostream> using 阅读全文
posted @ 2021-12-09 10:47 80k 阅读(74) 评论(0) 推荐(0)
摘要: 大整数用数组表示第一位写在index=0的位置,因为运算可能进位。vector<int> 自带size(),方便表示大整数;输出的时候要反向 高精度加法要记得最后加上carryvector<int> add(vector<int> &A, vector<int> &B){ if (A.size() 阅读全文
posted @ 2021-12-08 20:28 80k 阅读(68) 评论(0) 推荐(0)
摘要: 求数组的逆序对可以用归并排序的思想。在归并的过程中,求出当前范围的逆序对数。只需在归并排序的代码中多加一行 void MergeSortAndReversePairs(vector<int> &nums,int l,int r) { if(l>=r) return; int mid=(l+r)>>1 阅读全文
posted @ 2021-12-08 20:20 80k 阅读(34) 评论(0) 推荐(0)
上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 28 下一页