摘要: 树和哈希表结合 不必遍历即可取得树的节点(仅用一个哈希表表示二叉树的所有边,不用建立树结构) 阅读全文
posted @ 2021-12-07 20:27 80k 阅读(32) 评论(0) 推荐(0)
摘要: 摩尔投票法可以解决数组元素数量时间复杂度为 O(n)、空间复杂度为 O(1)的统计问题。 阅读全文
posted @ 2021-12-07 20:27 80k 阅读(24) 评论(0) 推荐(0)
摘要: 注意应用题和三维dp的转化 阅读全文
posted @ 2021-12-07 20:26 80k 阅读(16) 评论(0) 推荐(0)
摘要: 注意应用题向二维dp的转化 阅读全文
posted @ 2021-12-07 20:26 80k 阅读(20) 评论(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 阅读(30) 评论(0) 推荐(0)
摘要: 可以利用同样的dp方法 注意题目的转化(加减转化为加法,需要考虑正负号时 只需考虑一边 sum-neg) 阅读全文
posted @ 2021-12-07 20:24 80k 阅读(31) 评论(0) 推荐(0)
摘要: 动态规划相比递归的优势是 动态规划可以在每一步保留最优情况 而递归需要计算全部情况,时间复杂度较高(指数) 背包问题的简化仅存储当前的dpmap 写好状态转移关系判断更新顺序dpmap的发展为背包的容量(几个容量就几维) 阅读全文
posted @ 2021-12-07 20:23 80k 阅读(41) 评论(0) 推荐(0)
摘要: 差分法记录区间变化 防止遍历表示 阅读全文
posted @ 2021-12-07 20:23 80k 阅读(26) 评论(0) 推荐(0)
摘要: mt19937 在头文件<random>中,c++中的伪随机数生成器类型(与rand类似) 使用方法mt19937 gen(seed);//构造gen();生成随机数 uniform_int_distribution在头文件<random>中,均匀分布,是一个随机数分布类,参数为生成随机数的类型(例 阅读全文
posted @ 2021-12-07 20:22 80k 阅读(96) 评论(0) 推荐(0)
摘要: vector的assign()将区间[first,last)的元素赋值到当前的vector容器中,此方法会清除掉容器的旧内容 阅读全文
posted @ 2021-12-07 20:21 80k 阅读(39) 评论(0) 推荐(0)
摘要: 可以用两个优先队列记录数据流及其中位数。通过在两个队列插入数据以及平衡数据,维持队列的top为中位数 阅读全文
posted @ 2021-12-07 20:20 80k 阅读(32) 评论(0) 推荐(0)
摘要: 丑数可以利用多指针记录当前因数指向的丑数位置 min函数对int 和 unsigned_int取最小时,要进行类型转换 阅读全文
posted @ 2021-12-07 20:20 80k 阅读(39) 评论(0) 推荐(0)
摘要: 三色标记法找图中的环,或拓扑排序思想拆除安全的点 阅读全文
posted @ 2021-12-07 20:19 80k 阅读(30) 评论(0) 推荐(0)
摘要: 判断是否可以成为三角形,可以先排序,再两重循环,降低复杂度。 阅读全文
posted @ 2021-12-07 20:19 80k 阅读(32) 评论(0) 推荐(0)
摘要: Dijkstra算法可以利用最小堆进行优化 阅读全文
posted @ 2021-12-07 20:18 80k 阅读(22) 评论(0) 推荐(0)
摘要: is_sorted判断数组是否有序 阅读全文
posted @ 2021-12-07 20:18 80k 阅读(33) 评论(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 阅读(38) 评论(0) 推荐(0)
摘要: 通过一次深度优先遍历以及一个unordered_map可以记录每个节点的父节点 c++17,结构化绑定,结构化绑定允许通过对象、结构体的成员来初始化多个变量,结构化绑定声明使用auto来声明多个变量,所有变量都必须用中括号[ ]括起来。在所有情况下,元素或数据成员的数量都必须符合结构化绑定声明中的名 阅读全文
posted @ 2021-12-07 20:16 80k 阅读(40) 评论(0) 推荐(0)
摘要: lambda函数在递归调用时,要写清楚函数的类型,而不能用auto,且需要捕获std::function<void(TreeNode*)> DFS=[&](TreeNode* node){DFS(node->left);DFS(node->right);}; 阅读全文
posted @ 2021-12-07 20:15 80k 阅读(37) 评论(0) 推荐(0)
摘要: 通过定义d[],d[n]表示长度为n+1的数组尾部数字最小值(最小值更容易得到更长的数组),通过不断更新d[],得到最长递增子序列 阅读全文
posted @ 2021-12-07 20:15 80k 阅读(35) 评论(0) 推荐(0)
摘要: 当其中一个数组元素各不相同时,最长公共子序列问题可以转化为最长上升子序列问题。 阅读全文
posted @ 2021-12-07 20:14 80k 阅读(34) 评论(0) 推荐(0)
摘要: 隐式转换被设计得尽可能避免损失精度 static_cast 任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast;const_cast只能改变运算对象的底层const,不能改变表达式的类型;reinterpret_cast通常为运算对象的位模式提供较低层次上的从新解 阅读全文
posted @ 2021-12-07 20:13 80k 阅读(93) 评论(0) 推荐(0)
摘要: 对数组执行sizeof运算得到整个数组所占空间的大小(不会把数组转换成指针处理)对string或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间 阅读全文
posted @ 2021-12-07 20:13 80k 阅读(40) 评论(0) 推荐(0)
摘要: c++11新标准允许使用花括号括起来的初始值列表作为赋值语句右侧的运算对象vector<int> v1;v1={0,1,2,3,4,5,6};赋值运算符满足右结合律,这一点与其他二元运算符不太一样。赋值运算符返回其左侧运算对象。 阅读全文
posted @ 2021-12-07 20:12 80k 阅读(52) 评论(0) 推荐(0)
摘要: decltype作用于左值表达式时得到一个引用类型。int *p;decltype(*p);//结果为int &decltype(&p);//结果为int ** 阅读全文
posted @ 2021-12-07 20:11 80k 阅读(37) 评论(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 阅读(45) 评论(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 阅读(32) 评论(0) 推荐(0)
摘要: string可用字符串字面值或以'\0'结尾的字符数组进行初始化 阅读全文
posted @ 2021-12-07 20:09 80k 阅读(36) 评论(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 阅读(32) 评论(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 阅读(26) 评论(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 阅读(35) 评论(0) 推荐(0)
摘要: isdigit() 判断char是否为数字islower()判断char是否为小写字母to_string 转为string对于括号序列相关的题目,通用的解法是使用递归或栈。 阅读全文
posted @ 2021-12-07 20:06 80k 阅读(38) 评论(0) 推荐(0)
摘要: string的erase pop_back() substr()可用于删除操作。stoi将string转化为int 阅读全文
posted @ 2021-12-07 20:05 80k 阅读(27) 评论(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 阅读(28) 评论(0) 推荐(0)
摘要: unordered_map可以hash vector建立邻接矩阵,以空间换时间建立unordered_map<属性,节点>,从而保存图的属性到节点的映射关系,从而确定节点的邻接关系。 阅读全文
posted @ 2021-12-07 20:04 80k 阅读(29) 评论(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 阅读(34) 评论(0) 推荐(0)
摘要: 广度优先搜索获取最短路径方法。 emplace_back(),可以无参数直接调用。 可以用点和边构建图; unordered_map<string,int> word_id; vector<vector<int>> edge;//第一维表示每个节点,第二位表示每个相邻的节点 再通过广度优先搜索获取最 阅读全文
posted @ 2021-12-07 20:00 80k 阅读(35) 评论(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 阅读(49) 评论(0) 推荐(0)
摘要: 内置类型的变量未被显式初始化时,它的值由其定义的位置决定。定义于任何函数体之外的变量被初始化为0,定义在函数体内部的内置类型将不被初始化,其值是未定义的,如果试图拷贝或访问将引发错误。 阅读全文
posted @ 2021-12-07 19:57 80k 阅读(34) 评论(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 阅读(37) 评论(0) 推荐(0)
摘要: stol() string转longto_string();转string 阅读全文
posted @ 2021-12-07 19:54 80k 阅读(32) 评论(0) 推荐(0)
摘要: 动态规划既可以规划和为0~n时的最小数据量,也可以规划加入数据i时每个和的最小数据量 阅读全文
posted @ 2021-12-07 19:53 80k 阅读(34) 评论(0) 推荐(0)
摘要: 1、分别统计长度,长链表先向前走差值,在一同走直到公共节点或nulllptr2、双指针pA和pB,同时前进,若pA==pB则返回否则,当遍历到尾结点时,将其置为另一个链表的头结点。二者会同时达到公共节点或nullptr2与1复杂度完全相同3、哈希集合,集合中插入节点 阅读全文
posted @ 2021-12-07 19:52 80k 阅读(25) 评论(0) 推荐(0)
摘要: 与523题完全相同的方法以上适用于求部分和并且前状态只用保存一种(最大最小以及存在) 阅读全文
posted @ 2021-12-07 19:51 80k 阅读(24) 评论(0) 推荐(0)
摘要: 利用前缀和(prefixsum)求部分和。利用哈希表存储前状态,可以在O(1)获取,而不用全部遍历。 阅读全文
posted @ 2021-12-07 19:50 80k 阅读(25) 评论(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 阅读(128) 评论(0) 推荐(0)
摘要: __builtin_popcount(),统计二进制中1的个数。 阅读全文
posted @ 2021-12-07 19:48 80k 阅读(34) 评论(0) 推荐(0)
摘要: reverse(str.begin(), str.end());reverse函数 反转容器内的内容 阅读全文
posted @ 2021-12-07 19:47 80k 阅读(22) 评论(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 阅读(37) 评论(0) 推荐(0)
摘要: 可以利用字典树(前缀树,Trie)解决数与数组中数据异或的最值问题。Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。 这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 阅读全文
posted @ 2021-12-07 19:45 80k 阅读(49) 评论(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 阅读(48) 评论(0) 推荐(0)
摘要: 列表初始化会尽可能地把花括号内的值当成元素初始值来处理,只有无法执行列表初始化时才会考虑其他初始化方式;vector<int> v1{10};//一个元素;vector<int> v2{10,2};//两个元素vector<string> v5{"hi"};//一个元素"hi",列表初始化vecto 阅读全文
posted @ 2021-12-07 19:43 80k 阅读(36) 评论(0) 推荐(0)
摘要: 标准容器的迭代器都支持++、--、==和!=改变vector对象容量的操作会使vector的迭代器失效vector和string的迭代器支持加减运算iter+n;迭代器指示的位置比原迭代器相比向前移动n个元素iter-n;迭代器指示的位置比原迭代器相比向后移动n个元素iter+=n;迭代器加法复合运 阅读全文
posted @ 2021-12-07 19:43 80k 阅读(65) 评论(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 阅读(33) 评论(0) 推荐(0)
摘要: 头文件不应包含using声明 阅读全文
posted @ 2021-12-07 19:40 80k 阅读(19) 评论(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 阅读(43) 评论(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 阅读(26) 评论(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 阅读(27) 评论(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 阅读(57) 评论(0) 推荐(0)