随笔分类 -  Algorithm

上一页 1 ··· 5 6 7 8 9 10 下一页
摘要:可以用数组直观的模拟栈和队列,栈记录栈顶位置,队列记录头和尾。 单调栈和单调队列可以用来记录有单调性的数据,当插入新数据时,将违反单调性的数据删去,保持单调。 可以查找,距离最近的小于当前数据的位置,以及滑动窗口内的极值。 阅读全文
posted @ 2021-12-12 14:29 80k 阅读(39) 评论(0) 推荐(0)
摘要:链表一般不用结构体创建(new的使用很慢) 而是用邻接表进行表示 两个数组分别e[]和ne[]分别记录节点的值和下一个节点的编号 head记录头结点指向的位置,idx表示当前可以使用的节点 用数组模拟链表时,删除链表无法释放内存,但是运行速度快。 双链表则用e[]和l[]和r[]记录; 可以将单链表 阅读全文
posted @ 2021-12-12 10:50 80k 阅读(64) 评论(0) 推荐(0)
摘要:用于数据范围大但稀疏的数据 unique可以用来去重; unique(v.begin(),v.end()); 返回值指向最后一个无重复元素的下一位; 可以用 v.erase(unique(v.begin(),v.end()),v.end())去除有序数组中的重复元素。 对有序无重复数组,查找可以使用 阅读全文
posted @ 2021-12-11 10:50 80k 阅读(75) 评论(0) 推荐(0)
摘要:x&(-x)可以取得x的最后一位1. x&(x-1)可以去掉x的最后一位1. 阅读全文
posted @ 2021-12-11 10:44 80k 阅读(38) 评论(0) 推荐(0)
摘要:前缀和可以快速求部分和有一维和二维的实现。数组的下标最好从1开始前缀和下标从0开始,以统一求a1~ai时的接口 差分主要用于对某个区间同时进行加减前缀和的逆运算可以用o(n)的时间恢复原数组d[i]=a[i]-a[i-1];AcWing 797. 差分#include<iostream> using 阅读全文
posted @ 2021-12-09 10:47 80k 阅读(74) 评论(0) 推荐(0)
摘要:大整数用数组表示第一位写在index=0的位置,因为运算可能进位。vector<int> 自带size(),方便表示大整数;输出的时候要反向 高精度加法要记得最后加上carryvector<int> add(vector<int> &A, vector<int> &B){ if (A.size() 阅读全文
posted @ 2021-12-08 20:28 80k 阅读(68) 评论(0) 推荐(0)
摘要:求数组的逆序对可以用归并排序的思想。在归并的过程中,求出当前范围的逆序对数。只需在归并排序的代码中多加一行 void MergeSortAndReversePairs(vector<int> &nums,int l,int r) { if(l>=r) return; int mid=(l+r)>>1 阅读全文
posted @ 2021-12-08 20:20 80k 阅读(34) 评论(0) 推荐(0)
摘要:查找数组中第k个数,可以利用基于快速排序思想的快速选择算法。注意事项同快排完全相同一样int QuickFindK(int nums[],int l,int r,int k){ if(l==r&&l==k) return nums[k]; int left=l-1,right=r+1; int ke 阅读全文
posted @ 2021-12-08 20:17 80k 阅读(33) 评论(0) 推荐(0)
摘要:二分查找的本质是寻找一个性质,使数组的左侧全不满足,右侧全满足(或左侧全满足,右侧全不满足)。查找的结果是最后一个或第一个满足的点(左侧区间最右或右侧区间最左)根据两种情况,有不同的check()、mid、l、r写法 查左侧区间最右 mid=(l+r+1)>>1; if(check(mid)) l= 阅读全文
posted @ 2021-12-08 20:15 80k 阅读(62) 评论(0) 推荐(0)
摘要:swap()函数定义在std中,可用于交换容器的元素。rand()返回0~INT_MAX的随机数,可以用取余的方法求一定范围的随机数。random_shuffle(begin(s), end(s));也具有打乱的功能。advance(it,n);可令迭代器前进(n为负表示后退)n步distance( 阅读全文
posted @ 2021-12-08 20:01 80k 阅读(39) 评论(0) 推荐(0)
摘要:树和哈希表结合 不必遍历即可取得树的节点(仅用一个哈希表表示二叉树的所有边,不用建立树结构) 阅读全文
posted @ 2021-12-07 20:27 80k 阅读(32) 评论(0) 推荐(0)
摘要:摩尔投票法可以解决数组元素数量时间复杂度为 O(n)、空间复杂度为 O(1)的统计问题。 阅读全文
posted @ 2021-12-07 20:27 80k 阅读(24) 评论(0) 推荐(0)
摘要:mt19937 在头文件<random>中,c++中的伪随机数生成器类型(与rand类似) 使用方法mt19937 gen(seed);//构造gen();生成随机数 uniform_int_distribution在头文件<random>中,均匀分布,是一个随机数分布类,参数为生成随机数的类型(例 阅读全文
posted @ 2021-12-07 20:22 80k 阅读(92) 评论(0) 推荐(0)
摘要:可以用两个优先队列记录数据流及其中位数。通过在两个队列插入数据以及平衡数据,维持队列的top为中位数 阅读全文
posted @ 2021-12-07 20:20 80k 阅读(30) 评论(0) 推荐(0)
摘要:丑数可以利用多指针记录当前因数指向的丑数位置 min函数对int 和 unsigned_int取最小时,要进行类型转换 阅读全文
posted @ 2021-12-07 20:20 80k 阅读(36) 评论(0) 推荐(0)
摘要:三色标记法找图中的环,或拓扑排序思想拆除安全的点 阅读全文
posted @ 2021-12-07 20:19 80k 阅读(29) 评论(0) 推荐(0)
摘要:is_sorted判断数组是否有序 阅读全文
posted @ 2021-12-07 20:18 80k 阅读(32) 评论(0) 推荐(0)
摘要:lambda函数在递归调用时,要写清楚函数的类型,而不能用auto,且需要捕获std::function<void(TreeNode*)> DFS=[&](TreeNode* node){DFS(node->left);DFS(node->right);}; 阅读全文
posted @ 2021-12-07 20:15 80k 阅读(36) 评论(0) 推荐(0)
摘要:通过定义d[],d[n]表示长度为n+1的数组尾部数字最小值(最小值更容易得到更长的数组),通过不断更新d[],得到最长递增子序列 阅读全文
posted @ 2021-12-07 20:15 80k 阅读(35) 评论(0) 推荐(0)
摘要:当其中一个数组元素各不相同时,最长公共子序列问题可以转化为最长上升子序列问题。 阅读全文
posted @ 2021-12-07 20:14 80k 阅读(34) 评论(0) 推荐(0)

上一页 1 ··· 5 6 7 8 9 10 下一页