文章分类 - 算法笔记
摘要:题目存在一个性质让栈与队列中元素有单调性,重点思路在于一个“删”字 ####单调栈 找左边最近最小的数,若下一个入栈的数比前一个数小,那么前一个数就没有存在的必要了,就将其删除。 1.删除 2.输出 3.入栈 stack<int> st; for(int i = 0; i < n; i ++) {
阅读全文
摘要:与哈希类似,但是离散化是保序的,可以用二分。 vector<int> alls; // 存储所有待离散化的值 sort(alls.begin(), alls.end()); // 将所有值排序 alls.erase(unique(alls.begin(), alls.end()), alls.end
阅读全文
摘要:####n的二进制表示中第k位是0还是1 1.先把第k位移到最后一位 2.看个位 n >> k & 1 //输出10的每一位 int n = 10; for(int k = 3; k >= 0; k --) { cout << (n >> k & 1); } ####lowbit(x),得到x的最后
阅读全文
摘要:####基本操作 字符串存vector: for(int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0'); 去前导零:(除了加法,其他三种操作都需要去除前导零) while(C.size() > 1 && C.back() == 0)
阅读全文
摘要:前缀和向后,差分向前。 下标都是从1开始 ###前缀和 ####一维前缀和: 构造: S[i] = S[i - 1] + A[i] 求A数组中[l, r]的和: S[r] - S[l - 1] ####二维前缀和: 构造: for(int i = 1; i <= n; i ++) { for(int
阅读全文
摘要:123455555555555678 找第一个5:A[mid] >= 5 while(l < r) { int mid = l + r >> 1; if(A[mid] >= k) { r = mid; } else { l = mid + 1; } } 最后一个5:A[mid] <= 5 while
阅读全文
摘要:####快排 调试查看整个数组的值:*(&A[0])@count 简记:整个函数里没有等于号。 i < j的原因:会在一段索引里出不去从而死循环。 递归不是i而是j的例子:4 6 8 3 10 9 7 5 2 1。 看到的一个非常好的回答: void Quick(int A[], int low,
阅读全文
浙公网安备 33010602011771号