文章分类 -  算法笔记

摘要:题目存在一个性质让栈与队列中元素有单调性,重点思路在于一个“删”字 ####单调栈 找左边最近最小的数,若下一个入栈的数比前一个数小,那么前一个数就没有存在的必要了,就将其删除。 1.删除 2.输出 3.入栈 stack<int> st; for(int i = 0; i < n; i ++) { 阅读全文
posted @ 2022-10-20 22:09 wushucan 阅读(8) 评论(0) 推荐(0)
摘要:与哈希类似,但是离散化是保序的,可以用二分。 vector<int> alls; // 存储所有待离散化的值 sort(alls.begin(), alls.end()); // 将所有值排序 alls.erase(unique(alls.begin(), alls.end()), alls.end 阅读全文
posted @ 2022-10-14 10:21 wushucan 阅读(7) 评论(0) 推荐(0)
摘要:####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的最后 阅读全文
posted @ 2022-10-13 16:16 wushucan 阅读(9) 评论(0) 推荐(0)
摘要:####基本操作 字符串存vector: for(int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0'); 去前导零:(除了加法,其他三种操作都需要去除前导零) while(C.size() > 1 && C.back() == 0) 阅读全文
posted @ 2022-10-10 16:42 wushucan 阅读(12) 评论(0) 推荐(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 阅读全文
posted @ 2022-10-10 10:33 wushucan 阅读(30) 评论(0) 推荐(0)
摘要: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 阅读全文
posted @ 2022-10-08 23:20 wushucan 阅读(9) 评论(0) 推荐(0)
摘要:####快排 调试查看整个数组的值:*(&A[0])@count 简记:整个函数里没有等于号。 i < j的原因:会在一段索引里出不去从而死循环。 递归不是i而是j的例子:4 6 8 3 10 9 7 5 2 1。 看到的一个非常好的回答: void Quick(int A[], int low, 阅读全文
posted @ 2022-10-08 22:48 wushucan 阅读(9) 评论(0) 推荐(0)