dp
状态机 删除序列
二分题集
if(b[mid]>=a[i])r=mid;//需要目标是大于a[i](第一个数)
if(c[mid]<=a[i])l=mid;//需要目标是小于等于a[i](最后一个数)
Dijkstra算法
1、用双端队列来代替dijksta中需要找最小值点的一步(双端队列广搜)
拖拉机
FloodFill题集
if(x2>=0&&x2<n&&y2>=0&&y2<m&&g[x2][y2]=='X'){//小心把范围搞错
深搜题集(return前恢复现场)
差分题集
前缀最值
for(int i=1; i<=n; i++)smax[i]=max(smax[i-1],a[i].y);
for(int i=n; i; i--)smin[i]=min(smin[i+1],a[i].y);
n进制转换为10进制
int get(string s,int b){
int res=0;
for(auto c : s){
res=res*b+c-'0';
}
return res;
}
找到第k个数
nth_element(a+1,a+k,a+n+1);
高度从小到大枚举每座山,然后比较该山对应编号两边的高度 岛
m=unique(h+1,h+m+1)-h-1;//返回值是去重以后的个数
字符串find函数 寻找字符串
string s;
if(s.find("0000000")==-1 && s.find("1111111")==-1)
一个序列是合法括号序列,等价于: 最长合法括号子序列
(1)左右括号数量等(cnt=0)
(2)所有前缀中满足cnt>=0(右括号cnt++,左括号cnt–)
贪心思路: cnt>0时右括号能选则选
for(int i=0; s[i]; i++)
if(s[i]=='(')l++;
else
if(l>0)r++,l--;
队列:push/pop/front
unordered_multiset<int>s1;
s1.erase(s1.find(nums2[i]));//删除set里元素