
LeetCode_热题100_知识点总结0、C万能头文件 和 加速读取1、sort函数sort 函数对数组的排序sort 函数按照区间 [a,b] 第一个元素 a 进行排序sort() 以第二个进行排序自定义sort 解读2、unordered_map 和 unordered_setmp[k].push_back(str);unordered_map初始化;it.second ;添加元素 mp_set.insert();去除元素 mp_set.erase();3、字符串的转换string - intint - string4、vector 和 数组vector 的 back()数组初始化赋默认值5、emplace_back和push_back6、deque 双端队列7、随机函数8、构造函数声明初始化列表进行变量初始化和赋值9、背包问题01背包完全背包10、双端队列数组11、 vector\char ------ string12、 回溯组合 或者 子集 (控制开始位置 )全排列控制是否使用13、 一维dp数组组合14、每个数字占5个字符宽度向右对齐0、C万能头文件 和 加速读取#includebits/stdc.hios::sync_with_stdio(false);cin.tie(nullptr);1、sort函数sort 函数对数组的排序inta[]{1,3,2};sort(a,a3);//注意这里3是数组的长度//倒序排序sort(a,a3,greaterint());vectorintnums{1,3,2};sort(nums.begin(),nums.end());//注意这里nums.begin()是地址sort 函数按照区间 [a,b] 第一个元素 a 进行排序vectorvectorintintervals//将区间按第一个元素进行排序。sort(intervals.begin(),intervals.end());sort() 以第二个进行排序//默认是用第一个进行排序sort(points.begin(),points.end(),[](constvectorintu,constvectorintv){returnu[1]v[1];// 比较两个区间的起始位置});自定义sort 解读注意{}; (为nums中的一个元素) {为比较的判断条件}vectorpairint,intmap(n);sort(map.begin(),map.end(),[](constpairint,intu,constpairint,intv){if(u.second!v.second)returnu.secondv.second;returnu.firstv.first;});2、unordered_map 和 unordered_setmp[k].push_back(str);unordered_mapstring,vectorstringmp;//如果这个 key 不存在unordered_map 会自动创建一个新的空 vectorstringmp[k].push_back(str);unordered_map初始化;注意是大括号进行 key 和 value 的捆绑unordered_mapchar,charmp{{),(},{},{},{],[}};it.second ;ans.push_back(it.second);添加元素 mp_set.insert();mp.insert(c);去除元素 mp_set.erase();mp.erase(s[left]);3、字符串的转换string - intintistoi(str);int - stringstring strto_string(i);4、vector 和 数组vector 的 back()vectorvectorintmerged;{{1,2},{3,4},{5,6}}merged.back()[0]代表5merged.back()[1]代表6数组初始化赋默认值intcounts[26]{0};5、emplace_back和push_backemplace_back6、deque 双端队列#定义双端队列 dequeintq;#在右端末尾添加一个元素 q.push_back();#查看左端元素 q.front();#查看右端元素 q.back();#删除右端元素 q.pop_back();#删除左端元素 q.pop_front();7、随机函数#includecstdlib//范围通常是从 0 到 RAND_MAX其中 RAND_MAX 是一个常量通常为 32767srand(time(0));// 设置随机数种子intpivotIndexleftrand()%(right-left1);8、构造函数声明初始化列表进行变量初始化和赋值//下方代码的用法和第一行相同是构造函数初始化列表对变量初始化和赋值DLinkedNode(int_key,int_value):key(_key),value(_value),prev(nullptr),next(nullptr){}//构造函数//初始化 capacity 成员变量 为传递给构造函数的参数 _capacity//初始化 size 成员变量 为 0表示缓存初始化时为空。LRUCache(int_capacity):capacity(_capacity),size(0){}9、背包问题01背包遍历物品再遍历背包倒序遍历不重复使用nums[i] 代表物品的质量 和 价值j 代表容量// 遍历数组中的每个数字for(inti0;inums.size();i){// 从容量 capacity 往下遍历避免重复使用同一个数字// 如果 j nums[i]我们可以选择将 nums[i] 加入到组合中for(intjcapacity;jnums[i];--j){// dp[j] 代表j容量可以存储的最大价值//j - nums[i] 为容量减小 nums[i] 为增加的价值dp[j]max(dp[j],dp[j-nums[i]]nums[i]);}}完全背包放与不放偷与不偷遍历物品再遍历背包正序遍历重复使用dp数组初始化dp[0]初始化注意溢出的情况//完全背包//dp 数组初始化vectorintdp(amount1,INT_MAX);dp[0]0;//物品for(inti0;icoins.size();i){//背包for(intjcoins[i];jamount;j){if(dp[j-coins[i]]!INT_MAX){dp[j]min(dp[j-coins[i]]1,dp[j]);}}}returndp[amount]INT_MAX?-1:dp[amount];10、双端队列数组dequeintlevelList;//在队列末尾添加元素levelList.push_back(curNode-val);//在队列头添加元素levelList.push_front(curNode-val);11、 vectorchar ------ stringvectorcharpath;string(path.begin(),path.end());12、 回溯组合 或者 子集 (控制开始位置 )for(intistart;in;i){path.push_back(i);// 将当前数字添加到组合backtracking(n,k,i1);// 递归调用继续选择下一个数字path.pop_back();// 撤销选择回溯}全排列控制是否使用voidbacktracking(vectorintnums,vectorboolused){if(path.size()nums.size()){ans.push_back(path);return;}for(inti0;inums.size();i){if(!used[i]){path.push_back(nums[i]);used[i]true;backtracking(nums,used);used[i]false;path.pop_back();}}}13、 一维dp数组组合dp[j]dp[j]dp[j-1];等号左侧的 dp[j]相当于 dp[i][j]等号右侧的dp[j]其实相当于 dp[i-1][j]14、每个数字占5个字符宽度向右对齐coutsetw(5)x;欢迎大家和我沟通交流(✿◠‿◠)