1. 合法的括号序列(LeetCode 301)
左右括号数量相同。任意一个前缀中,左括号数量 >= 右括号数量
2. 前缀和(一维,二维)
3. 高精度加法(用数组模拟加法)
string add(string x, string y)
{
vector<int> A, B, C;
for(int i = x.size() - 1; i >= 0; i--) A.push_back(x[i] - '0');
for(int i = y.size() - 1; i >= 0; i--) B.push_back(y[i] - '0');
for(int i = 0, t = 0; i < A.size() || i < B.size() || t; i++)
{
if(i < A.size()) t += A[i];
if(i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}
string s;
for(int i = C.size() - 1, i >= 0; i--)
s += to_string(C[i]);
return s;
}
4. 对于树状数组和线段树,能用树状数组就用它
int lowbit(x){
return x & (-x);
}
求前缀和: for(int i = x; i >= 0; i -= lowbit(i)) res += tr[i];
某一个数加上一个数 v: for(int i = x; i <= n; i += lowbit(i)) tr[i] += v