12 2021 档案

摘要:一、最小生成树 1、prim算法 和dijkstra算法很像 (1)朴素版 O(n^2) 适合稠密图 dijkstra算法每次更新到起点的距离,prim算法每次更新到集合的最短距离(用邻接点到当前被加入点的距离更新)(集合为已经生成的树) 858 Prim算法求最小生成树 1 #include<io 阅读全文
posted @ 2021-12-31 11:38 80k 阅读(51) 评论(0) 推荐(0) 编辑
摘要:最短路问题 一、单源最短路(一个点到所有点的最短距离) 1、所有边的权重都为正 n个点,m个边 (1)朴素dijkstra O(n^2) 适合稠密图,O(n^2)=O(m) 算法步骤: ①初始化距离 dis[1]=0,dis[i]=+∞,集合s为已经找到的点的集合 ② for i=1:n 找到点t, 阅读全文
posted @ 2021-12-28 10:43 80k 阅读(137) 评论(0) 推荐(0) 编辑
摘要:图可以用邻接表存储, 邻接表为n个链表, 链表可以用数组模拟(比vector速度快)。 const int N; int h[N],e[N],ne[N],idx;//分别表示,h[i]:图中编号i的头结点,e[i]:节点i的值(编号),ne[i]节点i在链表中的下一个节点的idx。 void add 阅读全文
posted @ 2021-12-26 12:50 80k 阅读(218) 评论(0) 推荐(0) 编辑
摘要:memset按字节赋值, 常用的参数有 0(0),-1(值为-1,因为-1按补码存储,每一位都是1),0x3f(+∞),-0x3f(值为-∞,和-0x3f3f3f3f不等),0xc0(-∞) 头文件cstring 对于double,用科学计数法存储,初始化 -1可以视为-NAN 阅读全文
posted @ 2021-12-23 10:44 80k 阅读(60) 评论(0) 推荐(0) 编辑
摘要:整数哈希: 一般可以用取模的方式,模的数(数组长度)最好取质数且离2的幂尽可能远 哈希冲突可以用拉链法和开放寻址法解决 拉链法可以用链表进行模拟,插入时在哈希寻址处的链表头结点插入 开放寻址法则直接向后找(经验值,数据长度一般要开到题目数据范围的2-3倍),利用find函数找到数据的位置或应该插入的 阅读全文
posted @ 2021-12-23 10:43 80k 阅读(65) 评论(0) 推荐(0) 编辑
摘要:课程中模板模板参数的举例 template<typename T, template <typename T> class Container > class XCls { private: Container<T> c; public: XCls() { for(long i=0; i< 100; 阅读全文
posted @ 2021-12-22 22:31 80k 阅读(54) 评论(0) 推荐(0) 编辑
摘要:动态绑定的要求是 1、通过指针调用 2、虚函数 阅读全文
posted @ 2021-12-22 22:23 80k 阅读(40) 评论(0) 推荐(0) 编辑
摘要:堆可以用二叉树存储。 当前节点比左右子节点的值都小或等于(小根堆)。 对于完全二叉树,根节点编号为1,则,对于编号为n的节点,左子节点编号为2n,右子节点标号为2n+1。 完全二叉树可以用一维数组存储(编号→下标) 基本操作:up和down up:当节点数值比父节点小时,交换当前节点与父节点的值,然 阅读全文
posted @ 2021-12-19 20:42 80k 阅读(57) 评论(0) 推荐(0) 编辑
摘要:并查集支持操作: 1、将两个集合合并 2、询问两个元素是否在一个集合当中 每个集合用一棵树来表示,以根节点编号表示整个集合,每个节点存储父节点p[x] 判断树根 if(p[x]==x) 求集合编号 while(p[x]!=x) x=p[x]; 合并集合:x和y,x→根节点x,p[x]=y。 优化:路 阅读全文
posted @ 2021-12-19 19:16 80k 阅读(152) 评论(0) 推荐(0) 编辑
摘要:Trie树可以用来存储前缀字符串/数组。 可以用数组进行模拟 son[N][26] 记录节点的son cnt[N] 记录以当前节点为最后字符的字符串出现的次数 idx当前用到的节点 例题 143. 最大异或对 #include<iostream> using namespace std; const 阅读全文
posted @ 2021-12-19 18:51 80k 阅读(67) 评论(0) 推荐(0) 编辑
摘要:侯捷C++ static成员变量静态成员变量必须在类外初始化(定义)。这样可以保证static成员变量只被初始化一次。 模板函数作为模板类的友元时,声明也要加template<T> 阅读全文
posted @ 2021-12-12 21:18 80k 阅读(48) 评论(0) 推荐(0) 编辑
摘要:KMP用于o(n)的字符串匹配。 使用next数组记录以当前阶段为后缀的,和以开始位置为前缀匹配的最长长度,即匹配过程中进行后移后保留的长度。 next数组的计算和匹配过程类似。 推荐数组从1开始计数 注意,自身match时,是不包含当前位置的前缀,而互相match时,是包含当前位置的前缀,所以两次 阅读全文
posted @ 2021-12-12 15:40 80k 阅读(107) 评论(0) 推荐(0) 编辑
摘要:可以用数组直观的模拟栈和队列,栈记录栈顶位置,队列记录头和尾。 单调栈和单调队列可以用来记录有单调性的数据,当插入新数据时,将违反单调性的数据删去,保持单调。 可以查找,距离最近的小于当前数据的位置,以及滑动窗口内的极值。 阅读全文
posted @ 2021-12-12 14:29 80k 阅读(35) 评论(0) 推荐(0) 编辑
摘要:链表一般不用结构体创建(new的使用很慢) 而是用邻接表进行表示 两个数组分别e[]和ne[]分别记录节点的值和下一个节点的编号 head记录头结点指向的位置,idx表示当前可以使用的节点 用数组模拟链表时,删除链表无法释放内存,但是运行速度快。 双链表则用e[]和l[]和r[]记录; 可以将单链表 阅读全文
posted @ 2021-12-12 10:50 80k 阅读(57) 评论(0) 推荐(0) 编辑
摘要:用于数据范围大但稀疏的数据 unique可以用来去重; unique(v.begin(),v.end()); 返回值指向最后一个无重复元素的下一位; 可以用 v.erase(unique(v.begin(),v.end()),v.end())去除有序数组中的重复元素。 对有序无重复数组,查找可以使用 阅读全文
posted @ 2021-12-11 10:50 80k 阅读(66) 评论(0) 推荐(0) 编辑
摘要:x&(-x)可以取得x的最后一位1. x&(x-1)可以去掉x的最后一位1. 阅读全文
posted @ 2021-12-11 10:44 80k 阅读(33) 评论(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 阅读(59) 评论(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 阅读(56) 评论(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 阅读(23) 评论(0) 推荐(0) 编辑
摘要:查找数组中第k个数,可以利用基于快速排序思想的快速选择算法。注意事项同快排完全相同一样int QuickFindK(int nums[],int l,int r,int k){ if(l==r&&l==k) return nums[k]; int left=l-1,right=r+1; int ke 阅读全文
posted @ 2021-12-08 20:17 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:二分查找的本质是寻找一个性质,使数组的左侧全不满足,右侧全满足(或左侧全满足,右侧全不满足)。查找的结果是最后一个或第一个满足的点(左侧区间最右或右侧区间最左)根据两种情况,有不同的check()、mid、l、r写法 查左侧区间最右 mid=(l+r+1)>>1; if(check(mid)) l= 阅读全文
posted @ 2021-12-08 20:15 80k 阅读(58) 评论(0) 推荐(0) 编辑
摘要:简单的数位模拟题len位数共有 len*9*10^(len-1)个(10^(len-1)~10^n-1)可以对n进行试减,使范围内的数字全为len位。同时对于n对应的数字x有(x-10^(len-1)+1)*len>=n可以解得xx>=[n/len]-1+10^(len-1)利用n-=(x-10^( 阅读全文
posted @ 2021-12-08 20:14 80k 阅读(22) 评论(0) 推荐(0) 编辑
摘要:不使用数学方法,有明显的两段性适用于二分查找。同时第i行有几个数小于mid可以直接计算,[mid/i」个 阅读全文
posted @ 2021-12-08 20:12 80k 阅读(14) 评论(0) 推荐(0) 编辑
摘要:可以转化为二维背包问题。负无穷可以用memset和-0x3f初始化 阅读全文
posted @ 2021-12-08 20:12 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:关于信息熵,n个状态可携带log_2(n)的信息量n次实验,每次m个信息,共可判断(n+1)^m种情况 阅读全文
posted @ 2021-12-08 20:11 80k 阅读(19) 评论(0) 推荐(0) 编辑
摘要:二维转一维 m*n数据范围 num->{num%n,num/n};用unordered_map记录特殊的映射,非特殊不记录,节省空间。 阅读全文
posted @ 2021-12-08 20:11 80k 阅读(41) 评论(0) 推荐(0) 编辑
摘要:归并排序模板 int tmp[100010];void MergeSort(vector<int> &nums,int l,int r){ if(l>=r) return; int mid=(l+r)/2; MergeSort(nums,l,mid);//使用mid和mid+1防止死循环 Merge 阅读全文
posted @ 2021-12-08 20:07 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); 阅读全文
posted @ 2021-12-08 20:05 80k 阅读(66) 评论(0) 推荐(0) 编辑
摘要:模板以及说明如下 void QuickSort(vector<int> &nums,int l,int r){ if(l>=r) return; int key=nums[r];//r或l int left=l-1,right=r+1; while(left<right) { while(nums[ 阅读全文
posted @ 2021-12-08 20:04 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:swap()函数定义在std中,可用于交换容器的元素。rand()返回0~INT_MAX的随机数,可以用取余的方法求一定范围的随机数。random_shuffle(begin(s), end(s));也具有打乱的功能。advance(it,n);可令迭代器前进(n为负表示后退)n步distance( 阅读全文
posted @ 2021-12-08 20:01 80k 阅读(35) 评论(0) 推荐(0) 编辑
摘要:1、通过一个回文数计算下一个回文数: long long NextMirror(long long num) { string s=to_string(num); int n=s.size(); for(int i=(n-1)/2;i>=0;i--) { if(s[i]!='9') { char t 阅读全文
posted @ 2021-12-08 19:59 80k 阅读(39) 评论(0) 推荐(0) 编辑
摘要:树和哈希表结合 不必遍历即可取得树的节点(仅用一个哈希表表示二叉树的所有边,不用建立树结构) 阅读全文
posted @ 2021-12-07 20:27 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:摩尔投票法可以解决数组元素数量时间复杂度为 O(n)、空间复杂度为 O(1)的统计问题。 阅读全文
posted @ 2021-12-07 20:27 80k 阅读(19) 评论(0) 推荐(0) 编辑
摘要:注意应用题和三维dp的转化 阅读全文
posted @ 2021-12-07 20:26 80k 阅读(10) 评论(0) 推荐(0) 编辑
摘要:注意应用题向二维dp的转化 阅读全文
posted @ 2021-12-07 20:26 80k 阅读(13) 评论(0) 推荐(0) 编辑
摘要:与494求sum和neg的方法类似注意应用题和dp的数学转化(0-1背包问题)accumulate函数可对vector求和(numeric头文件)accumulate(nums.begin(),nums.end(),init,func) 阅读全文
posted @ 2021-12-07 20:25 80k 阅读(20) 评论(0) 推荐(0) 编辑
摘要:可以利用同样的dp方法 注意题目的转化(加减转化为加法,需要考虑正负号时 只需考虑一边 sum-neg) 阅读全文
posted @ 2021-12-07 20:24 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:差分法记录区间变化 防止遍历表示 阅读全文
posted @ 2021-12-07 20:23 80k 阅读(21) 评论(0) 推荐(0) 编辑
摘要:动态规划相比递归的优势是 动态规划可以在每一步保留最优情况 而递归需要计算全部情况,时间复杂度较高(指数) 背包问题的简化仅存储当前的dpmap 写好状态转移关系判断更新顺序dpmap的发展为背包的容量(几个容量就几维) 阅读全文
posted @ 2021-12-07 20:23 80k 阅读(32) 评论(0) 推荐(0) 编辑
摘要:mt19937 在头文件<random>中,c++中的伪随机数生成器类型(与rand类似) 使用方法mt19937 gen(seed);//构造gen();生成随机数 uniform_int_distribution在头文件<random>中,均匀分布,是一个随机数分布类,参数为生成随机数的类型(例 阅读全文
posted @ 2021-12-07 20:22 80k 阅读(79) 评论(0) 推荐(0) 编辑
摘要:vector的assign()将区间[first,last)的元素赋值到当前的vector容器中,此方法会清除掉容器的旧内容 阅读全文
posted @ 2021-12-07 20:21 80k 阅读(30) 评论(0) 推荐(0) 编辑
摘要:可以用两个优先队列记录数据流及其中位数。通过在两个队列插入数据以及平衡数据,维持队列的top为中位数 阅读全文
posted @ 2021-12-07 20:20 80k 阅读(25) 评论(0) 推荐(0) 编辑
摘要:丑数可以利用多指针记录当前因数指向的丑数位置 min函数对int 和 unsigned_int取最小时,要进行类型转换 阅读全文
posted @ 2021-12-07 20:20 80k 阅读(30) 评论(0) 推荐(0) 编辑
摘要:判断是否可以成为三角形,可以先排序,再两重循环,降低复杂度。 阅读全文
posted @ 2021-12-07 20:19 80k 阅读(18) 评论(0) 推荐(0) 编辑
摘要:三色标记法找图中的环,或拓扑排序思想拆除安全的点 阅读全文
posted @ 2021-12-07 20:19 80k 阅读(25) 评论(0) 推荐(0) 编辑
摘要:Dijkstra算法可以利用最小堆进行优化 阅读全文
posted @ 2021-12-07 20:18 80k 阅读(17) 评论(0) 推荐(0) 编辑
摘要:is_sorted判断数组是否有序 阅读全文
posted @ 2021-12-07 20:18 80k 阅读(27) 评论(0) 推荐(0) 编辑
摘要:vector.back()获取vector最后一个元素。multiset自动排序。tuple元组,tuple是一个固定大小的不同类型值的集合,是泛化的std::pair。std::get<ith>(tuple_obj)可以获取tuple_obj的第ith个值,ith必须在编译期已经给定。 阅读全文
posted @ 2021-12-07 20:17 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:通过一次深度优先遍历以及一个unordered_map可以记录每个节点的父节点 c++17,结构化绑定,结构化绑定允许通过对象、结构体的成员来初始化多个变量,结构化绑定声明使用auto来声明多个变量,所有变量都必须用中括号[ ]括起来。在所有情况下,元素或数据成员的数量都必须符合结构化绑定声明中的名 阅读全文
posted @ 2021-12-07 20:16 80k 阅读(26) 评论(0) 推荐(0) 编辑
摘要:lambda函数在递归调用时,要写清楚函数的类型,而不能用auto,且需要捕获std::function<void(TreeNode*)> DFS=[&](TreeNode* node){DFS(node->left);DFS(node->right);}; 阅读全文
posted @ 2021-12-07 20:15 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:通过定义d[],d[n]表示长度为n+1的数组尾部数字最小值(最小值更容易得到更长的数组),通过不断更新d[],得到最长递增子序列 阅读全文
posted @ 2021-12-07 20:15 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:当其中一个数组元素各不相同时,最长公共子序列问题可以转化为最长上升子序列问题。 阅读全文
posted @ 2021-12-07 20:14 80k 阅读(24) 评论(0) 推荐(0) 编辑
摘要:隐式转换被设计得尽可能避免损失精度 static_cast 任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast;const_cast只能改变运算对象的底层const,不能改变表达式的类型;reinterpret_cast通常为运算对象的位模式提供较低层次上的从新解 阅读全文
posted @ 2021-12-07 20:13 80k 阅读(75) 评论(0) 推荐(0) 编辑
摘要:对数组执行sizeof运算得到整个数组所占空间的大小(不会把数组转换成指针处理)对string或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间 阅读全文
posted @ 2021-12-07 20:13 80k 阅读(33) 评论(0) 推荐(0) 编辑
摘要:c++11新标准允许使用花括号括起来的初始值列表作为赋值语句右侧的运算对象vector<int> v1;v1={0,1,2,3,4,5,6};赋值运算符满足右结合律,这一点与其他二元运算符不太一样。赋值运算符返回其左侧运算对象。 阅读全文
posted @ 2021-12-07 20:12 80k 阅读(47) 评论(0) 推荐(0) 编辑
摘要:表达式求值之前,小整数类型的运算对象被提升成较大的整数类型bool值不应该参与运算bool b=true;bool b2=-b;//b2是true,true->1->-1->(-1!=0)->truem和n是整数,则m/n向0取整(舍弃小数部分),m%n与m符号相同(!!!),(m/n)*n+m%n 阅读全文
posted @ 2021-12-07 20:11 80k 阅读(42) 评论(0) 推荐(0) 编辑
摘要:decltype作用于左值表达式时得到一个引用类型。int *p;decltype(*p);//结果为int &decltype(&p);//结果为int ** 阅读全文
posted @ 2021-12-07 20:11 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:多维数组的外层范围for语句的循环控制变量必须用引用,否则会被退化成指针 using int_array = int[4];//类型别名的声明typedef int int_array[4];//等价的typedef声明using myRef = int&;//引用类型的别名typedef int& 阅读全文
posted @ 2021-12-07 20:10 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:string可用字符串字面值或以'\0'结尾的字符数组进行初始化 阅读全文
posted @ 2021-12-07 20:09 80k 阅读(24) 评论(0) 推荐(0) 编辑
摘要:auto推断数组的结果为指针,而decltype()可以返回大小正确的数组int ia[]={1,2,3,4};decltype(ia) ia2={1,2,3};//ia2={1,2,3,0};begin()和end()函数(不是容器的成员函数,定义在iterator有头文件中)可以返回数组首元素和 阅读全文
posted @ 2021-12-07 20:08 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:multimap按照key从小到大排序,且value不排序multiset<pair>按照pair从小到大排序,先比较key再比较value priority_queue<T> 传入less<T>时是大根堆,传入greater<T>时是小根堆,这和一般的算法是反的(例如sort())。 阅读全文
posted @ 2021-12-07 20:07 80k 阅读(17) 评论(0) 推荐(0) 编辑
摘要:采取「一边遍历一边统计」的方式,可以避免重复计算 v是由小到大排序的容器upper_bound(v.begin(), v.end(), val);可以利用二分查找返回第一个大于val的位置的迭代器lower_bound( begin,end,val);返回第一个大于等于的位置pair<Ty1,Ty2 阅读全文
posted @ 2021-12-07 20:07 80k 阅读(27) 评论(0) 推荐(0) 编辑
摘要:isdigit() 判断char是否为数字islower()判断char是否为小写字母to_string 转为string对于括号序列相关的题目,通用的解法是使用递归或栈。 阅读全文
posted @ 2021-12-07 20:06 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:string的erase pop_back() substr()可用于删除操作。stoi将string转化为int 阅读全文
posted @ 2021-12-07 20:05 80k 阅读(20) 评论(0) 推荐(0) 编辑
摘要:unordered_map可以hash vector建立邻接矩阵,以空间换时间建立unordered_map<属性,节点>,从而保存图的属性到节点的映射关系,从而确定节点的邻接关系。 阅读全文
posted @ 2021-12-07 20:04 80k 阅读(16) 评论(0) 推荐(0) 编辑
摘要:状态转移使用广度优先搜索unordered_set可以hash string 但是不能用vector注意广度优先搜索时,若使用int step和 unordered_set<T>/vecotr<bool> visited,step每层加一而不是每次加一或者不使用step,而是使用unordered_ 阅读全文
posted @ 2021-12-07 20:04 80k 阅读(21) 评论(0) 推荐(0) 编辑
摘要:双向广度优先搜索 queue<string> begin_queue,end_queue; begin_queue.push(begin); end_queue.push(end); unordered_set<string> begin_visited,end_visited; begin_vis 阅读全文
posted @ 2021-12-07 20:03 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:广度优先搜索获取最短路径方法。 emplace_back(),可以无参数直接调用。 可以用点和边构建图; unordered_map<string,int> word_id; vector<vector<int>> edge;//第一维表示每个节点,第二位表示每个相邻的节点 再通过广度优先搜索获取最 阅读全文
posted @ 2021-12-07 20:00 80k 阅读(27) 评论(0) 推荐(0) 编辑
摘要:辗转相除法求最大公约数 int GCD(int x,int y){ return y?GCD(y,x%y):x;}(整数)相除会导致数据精度问题,可以保存两个整数(除以最大公约数),注意考虑负数和0。 LL GCD(LL x,LL y){ if(x%y==0) return y; return GC 阅读全文
posted @ 2021-12-07 19:59 80k 阅读(39) 评论(0) 推荐(0) 编辑
摘要:内置类型的变量未被显式初始化时,它的值由其定义的位置决定。定义于任何函数体之外的变量被初始化为0,定义在函数体内部的内置类型将不被初始化,其值是未定义的,如果试图拷贝或访问将引发错误。 阅读全文
posted @ 2021-12-07 19:57 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:利用字符串字面值初始化字符数组时,末尾会加'\0'不允许将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他数组赋值。int a[]={1,2,3};int a2[]=a;//错误a2=a;//错误 复杂数组的声明int *ptrs[10];//ptrs含是有10个整形指针的数组,类型修饰符从 阅读全文
posted @ 2021-12-07 19:55 80k 阅读(30) 评论(0) 推荐(0) 编辑
摘要:stol() string转longto_string();转string 阅读全文
posted @ 2021-12-07 19:54 80k 阅读(26) 评论(0) 推荐(0) 编辑
摘要:动态规划既可以规划和为0~n时的最小数据量,也可以规划加入数据i时每个和的最小数据量 阅读全文
posted @ 2021-12-07 19:53 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:1、分别统计长度,长链表先向前走差值,在一同走直到公共节点或nulllptr2、双指针pA和pB,同时前进,若pA==pB则返回否则,当遍历到尾结点时,将其置为另一个链表的头结点。二者会同时达到公共节点或nullptr2与1复杂度完全相同3、哈希集合,集合中插入节点 阅读全文
posted @ 2021-12-07 19:52 80k 阅读(21) 评论(0) 推荐(0) 编辑
摘要:与523题完全相同的方法以上适用于求部分和并且前状态只用保存一种(最大最小以及存在) 阅读全文
posted @ 2021-12-07 19:51 80k 阅读(15) 评论(0) 推荐(0) 编辑
摘要:利用前缀和(prefixsum)求部分和。利用哈希表存储前状态,可以在O(1)获取,而不用全部遍历。 阅读全文
posted @ 2021-12-07 19:50 80k 阅读(19) 评论(0) 推荐(0) 编辑
摘要:n为正整数时n & (n - 1)其中 &表示按位与运算。该位运算技巧可以直接将n二进制表示的最低位1移除。n & (-n),该位运算技巧可以直接获取 n 二进制表示的最低位的 1。由于负数是按照补码规则在计算机中存储的,n表示为(a10...0)2,-n表示为(ā01...1)2+1=(ā10.. 阅读全文
posted @ 2021-12-07 19:49 80k 阅读(109) 评论(0) 推荐(0) 编辑
摘要:__builtin_popcount(),统计二进制中1的个数。 阅读全文
posted @ 2021-12-07 19:48 80k 阅读(27) 评论(0) 推荐(0) 编辑
摘要:reverse(str.begin(), str.end());reverse函数 反转容器内的内容 阅读全文
posted @ 2021-12-07 19:47 80k 阅读(15) 评论(0) 推荐(0) 编辑
摘要:min_element(), max_element(),minmax_element()求容器最小/最大值的迭代器min_element(v.begin(),v.end(),comp);传入比较函数comp时,可以理解为为先按照comp排序,min_element返回第一个值,max_elemen 阅读全文
posted @ 2021-12-07 19:46 80k 阅读(27) 评论(0) 推荐(0) 编辑
摘要:可以利用字典树(前缀树,Trie)解决数与数组中数据异或的最值问题。Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。 这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 阅读全文
posted @ 2021-12-07 19:45 80k 阅读(43) 评论(0) 推荐(0) 编辑
摘要:c++ 17标准支持 for (auto& [key, value] : map)vector擦除部分 vec.erase(vec.begin() + k, rec.end());vector用另一vector的一部分初始化 vector<T> v2(v1.begin()+n1,v1.end()-n 阅读全文
posted @ 2021-12-07 19:44 80k 阅读(26) 评论(0) 推荐(0) 编辑
摘要:标准容器的迭代器都支持++、--、==和!=改变vector对象容量的操作会使vector的迭代器失效vector和string的迭代器支持加减运算iter+n;迭代器指示的位置比原迭代器相比向前移动n个元素iter-n;迭代器指示的位置比原迭代器相比向后移动n个元素iter+=n;迭代器加法复合运 阅读全文
posted @ 2021-12-07 19:43 80k 阅读(49) 评论(0) 推荐(0) 编辑
摘要:列表初始化会尽可能地把花括号内的值当成元素初始值来处理,只有无法执行列表初始化时才会考虑其他初始化方式;vector<int> v1{10};//一个元素;vector<int> v2{10,2};//两个元素vector<string> v5{"hi"};//一个元素"hi",列表初始化vecto 阅读全文
posted @ 2021-12-07 19:43 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:string的操作。 string s; os<<s;//s写到输出流os,返回osis>>s;//is中读取字符串赋给s,字符串以空白分割(包括空格),返回isgetline(is,s);//从is中读取一行赋给s,返回is,注意会读取进换行符,但不存储换行符。s1+s2;//字符串连接字面值和字 阅读全文
posted @ 2021-12-07 19:42 80k 阅读(25) 评论(0) 推荐(0) 编辑
摘要:头文件不应包含using声明 阅读全文
posted @ 2021-12-07 19:40 80k 阅读(13) 评论(0) 推荐(0) 编辑
摘要:函数 nth_element, STL中实现的快速选择算法,使用时需要包含头文件<algorithm>void nth_element (Iterator first, Iterator first+nth, Iterator last, Compare comp);重新排列range [first 阅读全文
posted @ 2021-12-07 19:39 80k 阅读(34) 评论(0) 推荐(0) 编辑
摘要:typedef char *pstring;const pstring cstr=0;//此时cstr为指向char的常量指针const char *cstr=0;//此时cstr为指向char常量的指针 auto一般不保留顶层const,保留底层const,忽略引用。 decltype选择并返回操 阅读全文
posted @ 2021-12-07 19:38 80k 阅读(22) 评论(0) 推荐(0) 编辑
摘要:对于一个普通变量,可以仅在声明时加extern关键字,而定义不需要;extern int i;//声明int i;//声明并定义int i=1;//定义并初始化包含了显式初始化的声明即成为定义;extern double pi=3.1416//定义 对于const变量,默认仅在当前文件有效;若要令c 阅读全文
posted @ 2021-12-07 19:35 80k 阅读(22) 评论(0) 推荐(0) 编辑
摘要:给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。 class Solution { public: bool judgeSquareSum(int c) { long long i=0; long long j=sqrt(c)+1; while(j>=i 阅读全文
posted @ 2021-12-07 19:34 80k 阅读(35) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示