
python算法模板
文章平均质量分 80
啥也不会做
这个作者很懒,什么都没留下…
展开
-
python算法模板第二部分(2)(Trie树、并查集、堆、哈希表、字符串哈希法)
注:本文是在学习了acwing的算法基础课后撰写,主要用于记录python版本算法的模板。其中部分参考了acwing众多大佬的题解。1.Trie树思想:Trie树是用于快速存储和查找字符串集合的数据结构。一般情况下,字符串要么只有小写、要么只有大写、要么只有数字,不会同时出现太多情况,否则分叉太多,搜索慢。常见操作:1.insert向集合中插入一个字符串 x(存储)2.query询问一个字符串在集合中出现了多少次(查找)模板:N = 100010idx = 0son = [[0] *原创 2021-07-18 16:55:15 · 419 阅读 · 0 评论 -
python算法模板第二部分(1)(单链表、双链表、模拟栈、模拟队列、单调栈、单调队列、KMP算法)
注:本文是在学习了acwing的算法基础课后撰写,主要用于记录python版本算法的模板。其中部分参考了acwing众多大佬的题解。1.单链表思想:本部分将使用数组实现链表操作,而不使用指针。数组e用于存放链表值(val),数组ne用于存放下一个链表节点(next),index用于存下标。常见操作:1.向链表头插入一个数2.删除第 k 个节点后的节点3.在第k个节点后插入一个节点注:第 k 个节点并不是指当前链表的第 k 个数,而是第k个插入链表的数(即下标为k的数)模板:N = 100原创 2021-07-13 17:59:26 · 352 阅读 · 0 评论 -
python算法模板第一部分(3)(双指针、位运算、离散化、区间合并)
1.双指针思想:朴素的两重循环需要O(n2n^2n2),可以利用某种性质(i和j之间的单调关系)将其变为O(n)。可用于单序列和双序列。单序列中可用于维护一段区间,双序列中用于维护某种次序,如有序序列的合并。模板:# 朴素做法(用于对比):for i in range(n): for j in range(i): if check(j, i): res = max(res, j - i + 1)# 双指针做法:for j in range(n): while i <=原创 2021-07-09 14:09:20 · 387 阅读 · 0 评论 -
python算法模板第一部分(2)(前缀和与差分)
注:本文是在学习了acwing的算法基础课后撰写,主要用于记录python版本算法的模板。其中部分参考了acwing众多大佬的题解。1.一维前缀和思想:原数组 a1a2...ana_1 a_2...a_na1a2...an前缀和 Si=a1+a2+...+aiS_i = a_1 + a_2 + ... + a_iSi=a1+a2+...+ai (下标从1开始方便计算),定义S0=0S_0 = 0S0=0前缀和的作用:快速求出原数组中一段数的和。例如,求 [l, r] 区间内数组a原创 2021-07-06 22:33:02 · 1672 阅读 · 6 评论 -
python算法模板第一部分(1)(快速排序、快速选择、归并排序、整数二分、实数二分)
注:本文是在学习了acwing的算法基础课后撰写,主要用于记录python版本算法的模板。1.快速排序思想:用列表中的一个数(pivot)来分割列表,左侧的数都小于pivot,右侧的数都大于pivot。步骤:1.确定pivot。左、右、中点、随机都可以,选择不同代码上可能有细微区别。这里选择中点。2.调整pivot左侧和右侧的数,使左侧的数都小于pivot,右侧的数都大于pivot。利用双指针。3.递归处理左、右两段。模板:def quick_sort(nums, start, end):原创 2021-07-06 12:32:31 · 888 阅读 · 1 评论