算法
- 双指针
核心思想是发掘暴力算法里ij的性质从而优化为O(n)
(i) 对于一个序列,用两个指针维护一段区间
(ii) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作 - 位运算
i)求n的二进制表示中第k位的值
ii)返回x的最后一位1与其之后的二进制数字 - 离散化
更好的储存稀疏数据,可以理解为保序哈希
1)使用vector存数据,排序,去重
2)使用二分查找第二模板搜索数据离散化后的值 - 区间和并
一种贪心算法
1)使用vector[HTML_REMOVED]储存区间并确定下确界
2)维护当前区间
3)循环结束后 如果区间非空再压进一次 ※容易忽略切记切记
小技巧与知识
- 原码,反码,补码
- 计算机使用加法做减法,存储负数绝对值的补码
今日模板算法默写框架
位运算
求n的第k位数字:
返回n的最后一位1:lowbit(n)
双指针算法
for (int i = 0, j = 0; i < n; i ++ )
{
}
离散化
vector[HTML_REMOVED] alls;
sort(alls.begin(), alls.end());
alls.erase(unique(alls.begin(), alls.end()), alls.end());
int find(int x)
{
}
区间合并
void merge(vector[HTML_REMOVED] &segs)
{
}
辽宁nb郭艾伦nb!