随笔分类 -  算法模板

摘要:大整数用数组表示第一位写在index=0的位置,因为运算可能进位。vector<int> 自带size(),方便表示大整数;输出的时候要反向 高精度加法要记得最后加上carryvector<int> add(vector<int> &A, vector<int> &B){ if (A.size() 阅读全文
posted @ 2021-12-08 20:28 80k 阅读(56) 评论(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 阅读(23) 评论(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 阅读(29) 评论(0) 推荐(0) 编辑
摘要:二分查找的本质是寻找一个性质,使数组的左侧全不满足,右侧全满足(或左侧全满足,右侧全不满足)。查找的结果是最后一个或第一个满足的点(左侧区间最右或右侧区间最左)根据两种情况,有不同的check()、mid、l、r写法 查左侧区间最右 mid=(l+r+1)>>1; if(check(mid)) l= 阅读全文
posted @ 2021-12-08 20:15 80k 阅读(58) 评论(0) 推荐(0) 编辑
摘要:归并排序模板 int tmp[100010];void MergeSort(vector<int> &nums,int l,int r){ if(l>=r) return; int mid=(l+r)/2; MergeSort(nums,l,mid);//使用mid和mid+1防止死循环 Merge 阅读全文
posted @ 2021-12-08 20:07 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:模板以及说明如下 void QuickSort(vector<int> &nums,int l,int r){ if(l>=r) return; int key=nums[r];//r或l int left=l-1,right=r+1; while(left<right) { while(nums[ 阅读全文
posted @ 2021-12-08 20:04 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:1、通过一个回文数计算下一个回文数: long long NextMirror(long long num) { string s=to_string(num); int n=s.size(); for(int i=(n-1)/2;i>=0;i--) { if(s[i]!='9') { char t 阅读全文
posted @ 2021-12-08 19:59 80k 阅读(39) 评论(0) 推荐(0) 编辑
摘要:辗转相除法求最大公约数 int GCD(int x,int y){ return y?GCD(y,x%y):x;}(整数)相除会导致数据精度问题,可以保存两个整数(除以最大公约数),注意考虑负数和0。 LL GCD(LL x,LL y){ if(x%y==0) return y; return GC 阅读全文
posted @ 2021-12-07 19:59 80k 阅读(39) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示