数据结构与算法
文章平均质量分 58
各类面试常用数据结构与算法--python实现
可可卷
【python算法】
【数据分析】
【数学建模】
【机器学习】
【深度学习】
【数据可视化】
展开
-
【算法】力扣第 276场周赛
T4没写,三题五行文章目录[5980. 将字符串拆分为若干长度为 k 的组](https://leetcode-cn.com/problems/divide-a-string-into-groups-of-size-k/)[5194. 得到目标值的最少行动次数](https://leetcode-cn.com/problems/minimum-moves-to-reach-target-score/)[5982. 解决智力问题](https://leetcode-cn.com/problems/solvi原创 2022-01-16 15:52:14 · 2006 阅读 · 24 评论 -
【算法】力扣第 266场周赛
5918. 统计字符串中的元音子字符串看数据范围,暴力过class Solution: def countVowelSubstrings(self, word: str) -> int: res=0 n=len(word) for a in range(n): for b in range(a+5,n+1): i=word[a:b] if any(x no原创 2021-12-25 22:04:13 · 523 阅读 · 1 评论 -
【算法】力扣第 264 场周赛
5906. 句子中的有效单词数写的比较啰嗦了点,其实用**正则**一行就搞定了return sum(bool(re.match(r'[a-z]*([a-z]-[a-z]+)?[!.,]?$', w)) for w in sc.split())class Solution: def countValidWords(self, sentence: str) -> int: nums=[str(i) for i in range(10)] def func(原创 2021-12-24 22:35:51 · 2851 阅读 · 1 评论 -
【算法】力扣第 263 场周赛
5902. 检查句子中的数字是否递增python就是好用,split()划分+dic计数class Solution: def areNumbersAscending(self, s: str) -> bool: dic={str(i):1 for i in range(101)} res=0 for x in s.split(): if dic.get(x): if res<in原创 2021-12-23 23:50:14 · 5982 阅读 · 21 评论 -
【算法】力扣第 262 场周赛
5894. 至少在两个数组中出现的值数据量才100,直接暴力class Solution: def twoOutOfThree(self, nums1: List[int], nums2: List[int], nums3: List[int]) -> List[int]: cnt1,cnt2,cnt3=Counter(nums1),Counter(nums2),Counter(nums3) seq=set(nums1+nums2+nums3)原创 2021-12-23 23:49:17 · 982 阅读 · 3 评论 -
【算法】二叉树的遍历指南(前序、中序、后序、层序、BFS、DFS)
【算法】一文带你复习⭐二叉树⭐的遍历,前序遍历,中序遍历,后序遍历,层序遍历,DFS,BFS……原创 2021-12-26 13:35:36 · 3911 阅读 · 135 评论 -
【蓝桥杯图片题解】第十三届蓝桥杯模拟赛第二期python组图片题解
第十三届蓝桥杯模拟赛第二期python组图片题解原创 2021-12-10 09:21:13 · 1511 阅读 · 18 评论 -
【蓝桥杯】国奖学长带你复盘第十三届蓝桥杯模拟赛
第十三届蓝桥杯模拟赛第二期python组个人题解作者简介:大家好,我是可可卷,在十二届蓝桥杯中侥幸获得国家三等奖。自知实力有限,代码不足之处还请各位大佬多多批评指正~一、小蓝的IP地址为 192.168.*.21……原创 2021-12-10 09:16:47 · 31315 阅读 · 129 评论 -
【算法】深度优先搜索
DFS基本思想本质是遍历决策树关注路径、选择列表、结束条件结合回溯:重点是撤销选择result = []def dfs(路径, 选择列表): if 满足结束条件: result.append(路径) return for 选择 in 选择列表: 做选择 dfs(路径, 选择列表) 撤销选择二叉树的DFS对于二叉树,我们一般这样做DFS:def dfs(root): # 判断原创 2021-12-10 08:51:55 · 814 阅读 · 5 评论 -
【算法】区间DP
区间DP是线性DP的扩展,主要解决分阶段的划分问题区间DP的特点:合并:即将两个或多个部分进行整合,当然也可以反过来;特征:能将问题分解为能两两合并的形式;求解:对整个问题设最优值,枚举合并点,将问题分解为左右两个部分,最后合并两个部分的最优值得到原问题的最优值状态属性区间DP的状态属性一般为某种最值,追求价值最大或代价最小集合f[i][j]表示将下标位置i到j的所有元素合并能获得的价值的最大值状态转移方程f[i][j]=max{f[i][j],f[i][k]+f[k+原创 2021-12-06 16:53:10 · 510 阅读 · 3 评论 -
【算法】前缀和
生成前缀和数组nums=[1,3,5,7,9]pre=[0]for n in nums: pre.append(pre[-1]+n)也可以利用itertools.accumulate:from itertools import accumulatenums=[1,3,5,7,9]pre=list(accumulate([0]+nums))计算区间的和∑k=ijnums[k]\sum_{k=i}^j nums[k]∑k=ijnums[k],即nums[i]+nums[i+原创 2021-12-05 21:37:31 · 710 阅读 · 5 评论 -
【算法】排序算法总结
排序数据生成与5大经典排序算法原创 2021-12-05 21:36:49 · 1780 阅读 · 2 评论 -
【算法】回溯
回溯回溯和dfs关系密切DFS基本思想:本质是遍历决策树关注路径、选择列表、结束条件结合回溯:重点是撤销选择res = []def dfs(路径, 选择列表): if 满足结束条件: res.append(路径) return for 选择 in 选择列表: 做选择 dfs(路径, 选择列表) 撤销选择全排列注意res.append(path[:]):是path的一个拷贝cla原创 2021-12-05 21:36:15 · 495 阅读 · 0 评论 -
【数据结构】线段树
树状数组是一颗多叉树,而线段树是一颗平衡二叉树,两者多用于区间的操作借用宫水三叶的总结:数组不变,求区间和:「前缀和」、「树状数组」、「线段树」多次修改某个数,求区间和:「树状数组」、「线段树」多次整体修改某个区间,求区间和:「线段树」、「树状数组」(看修改区间的数据范围)多次将某个区间变成同一个数,求区间和:「线段树」、「树状数组」(看修改区间的数据范围这样看来,「线段树」能解决的问题是最多的,那我们是不是无论什么情况都写「线段树」呢?答案并不是,而且恰好相反,只有在我们遇到第 4 类原创 2021-12-05 21:34:52 · 339 阅读 · 3 评论 -
【数据结构】树状数组
树状数组引入一个数总可写成:num=2i+2j+2k,i<j<knum=2^i + 2^j + 2^k,i<j<knum=2i+2j+2k,i<j<k(参考二进制)因此可以将[1,num]区间分成len=2i:[1,2i]len=2^i:[1,2^i]len=2i:[1,2i]len=2j:[2i+1,2j]len=2^j:[2^i+1,2^j]len=2j:[2i+1,2j]len=2k:[2j+1,2k]len=2^k:[2^j+1,2^k]len=2k:[原创 2021-12-05 21:33:11 · 292 阅读 · 1 评论 -
【数据结构】前缀树
前缀树,也叫字典树,Trie前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。可以简单地认为,Trie是一种26叉树,每一个节点都有26个子节点,对应a-z。单词不存储于字典树的节点内,而是字典树从根节点到该节点的路径在具体实现上,python使用字典性能更好,而C++则是使用数组性能更好 字典树练习题集 https://leetcode-cn.com/tag/trie/problemset/实现 T原创 2021-12-05 21:32:01 · 488 阅读 · 1 评论 -
【数据结构】堆
堆,或者说优先队列,是一颗完全二叉树一般用数组存储,节点i的左、右子节点分别为2*i+1、2*i+2堆分为小根堆和大根堆(python中为小根堆),小根堆的父节点的值小于或等于子节点的值heapq创建堆import heapqheap=[]heapq.heapify(heap)添加元素heapq.heappush(heap,num)弹出元素弹出堆顶元素,对于python,是最小元素heapq.heappop(heap)取最值取n个最值,返回一个列表h原创 2021-12-05 21:31:02 · 775 阅读 · 1 评论 -
【数据结构】单调栈
栈是很基础的一种数据结构,具有后入先出(LIFO)的特性单调栈也是一种栈,一般用于处理具有Next Greater Element特点的问题单调递减栈在一个队列中针对每一个元素从它右边寻找第一个比它大的元素在一个队列中针对每一个元素从它左边寻找第一个比它大的元素(从后往前遍历)单调递增栈在一个队列中针对每一个元素从它右边寻找第一个比它小的元素在一个队列中针对每一个元素从它左边寻找第一个比它小的元素(从后往前遍历)下一个更大元素 I模板题class Solution:原创 2021-12-05 21:30:21 · 318 阅读 · 0 评论 -
【数据结构】并查集
并查集板子class UnionFind: def __init__(self, n: int): self.rank = [1] * n self.root = list(range(n)) def find(self, x: int) -> int: if self.root[x] != x: self.root[x] = self.find(self.root[x]) return self.root[x]原创 2021-12-05 21:29:27 · 363 阅读 · 3 评论