- 博客(6)
- 资源 (1)
- 收藏
- 关注
原创 python 辗转相除法 最大公约数
对于辗转相除法的证明:https://blog.youkuaiyun.com/er111er/article/details/79251895原作者写得很棒。 def gcd(a,b): return a if b==0 else gcd(b,a%b)首先核心在于:a和b的最大公约数等价于b和a对b求余的最大公约数。感性理解,假设存在最大公约数M,那么a是M的倍数,b是M的倍数,那么a和b的线性组合也是M的倍数。所以a对b的余数是线性组合的一种,那么也是M的倍数,更重要的是a对b的余数小于a和b(a&g
2020-12-04 20:30:12
979
原创 python 堆优化的迪杰斯特拉最短路径算法(Dijkstra‘s)
def DIJ(self, lengths: List[List[int]], N: int, K: int) -> int: #lengths为权值矩阵,N为节点个数,K为出发节点 #例如lengths = [[2,1,1],[2,3,1],[3,4,1]],表示从2到1路径长度为1,从2到3路径长度为1 graph = collections.defaultdict(list) for x,y,z in lengths: ...
2020-12-02 11:20:24
993
3
原创 python 简易版本树状数组
class BIT: def __init__(self, n: int): self.n = n+1 self.c = [0]*(self.n) def update(self, i: int, di: int) -> None: diff = di i += 1 while i<self.n: self.c[i] += diff i += i&am
2020-11-29 20:25:15
170
原创 python 树状数组
class NumArray: def __init__(self, nums: List[int]): self.n = len(nums)+1 self.c = [0]*(self.n) for i in range(len(nums)): self.update(i,nums[i]) def update(self, i: int, val: int) -> None: diff = v
2020-11-27 11:04:59
520
原创 python 线段树模板
class NumArray: def __init__(self, nums: List[int]): n = 1 while n<len(nums): n<<=1 self.n = n self.tree = [0]*self.n + nums + [0]*(self.n-len(nums)) for i in range(self.n-1,0,-1):
2020-11-26 20:42:38
455
原创 python 并查集模板
python 并查集模板 def find(x,pre): root, p = x, x # root:根节点, p:指针 # 找根节点 while root != pre[root]: root = pre[root] # 路径压缩,把每个经过的结点的上一级设为root(直接设为首级) while p != p
2020-11-23 14:52:33
355
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人