基础算法
文章平均质量分 64
各种基础算法的介绍,包括原理、代码模板、时间复杂度等
zadarmo_
重庆大学22级研二,目前正在写论文,目标2024年5月份之前找到一份后端开发相关的实习。
展开
-
【排序】快速排序
重点在于第二步上。做法是:在区间[l, r]中,指定两个指针i、j。当i和j停下来的时候,说明x[i] >= a,x[j] = x[j]。那根据我们的想要实现的目的,要保证左边 = a,也就是x[i]原创 2024-03-17 11:35:53 · 718 阅读 · 0 评论 -
【基础算法】二分模板及常见题型
因为是找到最后一个,所以当满足原创 2024-03-10 18:39:38 · 401 阅读 · 0 评论 -
【leetcode】链表总结
删除节点,涉及到 2 个节点,当前节点 cur 和当前节点的前继 pre。如果删除的是头节点,就没有前继,所以需要哑节点交换节点,涉及到 3 个节点,当前节点 cur、当前节点的前继 pre、当前节点的后继 next。类似的,头节点没有前继,所以需要哑节点初始化,pre = dummy后续的操作中,只移动 pre,dummy 保持不变由于第一次 pre 和 dummy 的后继指向的是同一个,所以 pre 的后继更新了,dummy 的后继也会更新,即达到了更新头节点的目的。原创 2023-12-16 11:07:52 · 137 阅读 · 0 评论 -
全排列算法
一、无重复数全排列方法①:1. 原理假设待排序列为a={a1,a2,a3,...,an}a = \{a_1,a_2,a_3,...,a_n\}a={a1,a2,a3,...,an},对应的全排列记为Permu(1,n)Permu(1, n)Permu(1,n),表示索引从111到nnn的数组成序列的全排列。它是一个集合,集合中的每个元素是一种排列。比如对于序列{1,2,3}\{1,2,3\}{1,2,3},Permu(1,3)={{1,2,3},{1,3,2},{2,1,3},{2,3,1}原创 2020-11-13 12:19:57 · 714 阅读 · 0 评论 -
高精度除法
本文只考虑高精度除低精度一、算法介绍与加、减、乘不同,除法是从高位开始算。二、代码#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;vector<int> div(vector&l...原创 2020-03-30 17:17:35 · 243 阅读 · 0 评论 -
高精度乘法
本文只考虑高精度乘低精度一、算法介绍用A[i]表示高精度整数,b表示低精度整数,t = A[i] * b + 上一次的进位t % 10位当前位t /= 10为一下次的进位在A遍历完了之后,t可能仍然很大,所以要继续循环,直到t等于0。二、代码#include <iostream>#include <string>#include <vecto...原创 2020-03-30 17:13:13 · 207 阅读 · 0 评论 -
高精度减法
一、算法介绍与加法类似,从低位开始一位一位减,用t表示A[i]-B[i]-上一次的借位,C[ ]表示结果。每次减有两种情况:C[i]={t,A[i]>B[i]t+10,A[i]≤B[i]C[i]=\begin{cases} t,& A[i] > B[i]\\ t +10,& A[i] \le B[i] \end{cases} C[i]={t,t+10,A[...原创 2020-03-30 17:07:05 · 166 阅读 · 0 评论 -
高精度加法
一、说明在计算机中,数据的范围也是有限的。所以如果对于位数较长的数进行计算,比如加法,必须用高精度算法。(python : ? )二、算法介绍高精度的数据没办法用某一种类型的变量来存,所以只能用数组来存。该算法的思想就是用数组取存高精度的数,然后模拟我们列竖式计算的过程。举例说明A3A2A1A0B0B2B1B0A_3A_2A_1A_0\\B_0B_2B_1B_0\\A3A2A...原创 2020-03-30 16:19:17 · 129 阅读 · 0 评论 -
差分(前缀和的逆运算)
一维差分对于一个数组a[ ],我们构造一个数组b[ ],使得:a[i]=∑k=1ib[k] a[i] = \sum_{k = 1}^ib[k] a[i]=k=1∑ib[k]即a[ ]为b[ ]的前缀和。1. 先思考:将a[ ]中某一段[l, r]之间的数加上c,对于b[ ]的影响如何?由图可知:由于a[ ]中绿色部分都加上了c,那么对于b[ ]来说:最前面被加的那个数的对应位置要...原创 2020-03-16 11:55:50 · 731 阅读 · 0 评论 -
【基础算法】前缀和
一维前缀和对于一个数组a[ ],我们构造一个数组s[ ],使得:s[i]=∑k=1ia[k] s[i] = \sum_{k = 1}^i a[k] s[i]=k=1∑ia[k]1. 构造前缀和for(int i = 1; i <= n; i ++ ) { cin >> a[i]; s[i] = s[i - 1] + a[i];}2. 求[l, r]的和co...原创 2020-03-16 11:24:25 · 132 阅读 · 1 评论 -
常见的位运算
运算效果x << 1、x >> 1乘、除2x & 1判断x是否为奇数x & (x - 1)去掉x最低位的1x & (-x)取出最低位的1x & (1 << (i - 1))判断二进制下x的第i位是不是1x | (1 << (i - 1))把二进制下x的第i位...原创 2020-03-01 10:20:47 · 149 阅读 · 0 评论 -
快速幂
对于一个运算:331,乘31个2速度是比较慢的。快速幂 可以将O(n)的复杂度降到O(logn)的复杂度。模板如下:int pow(int a, int b, int mod){ int ans = 1 % mod; while(b){ if(b & 1) ans = ans 1ll * a % mod; a = a * 1ll * a % mod; b >...原创 2020-02-29 21:32:40 · 141 阅读 · 0 评论