
没事写两道算法题
文章平均质量分 66
各种小小的算法题
__不想写代码__
新手写总结,不足之处欢迎指正
展开
-
LeetCode入门计划 | 并查集(Python3)
文章目录前言一、并查集二、LeetCode 例题1.547.省份的数量2.684.冗余连接总结前言并查集一、并查集并查集一共可以分为三步:1.初始化2.合并3.查询首先是初始化: 初始化是用一个数组来来记录自己(我们以谁是谁的先辈为例),初始化时,自己是自己的先辈。初始化用如下代码表示: def init(length:int)->List[int]: return list(range(length))用一个数组parent 来表示 pare原创 2022-01-22 22:04:45 · 1420 阅读 · 2 评论 -
LeetCode入门计划 | 广度优先搜索(Python3)
提示:LeetCode学习打卡文章目录简介一、LeetCode 例题1.637.二叉树的层平均值2.剑指offer|| 044.二叉树每层的最大值3.迷宫问题探索中。。。。。总结简介广度优先搜索是用来搜索图或者树的算法,与深度优先搜索不同的是,它是先搜索自己周围所有相邻的节点,不会搜索到最深处才返回值。追求的是广度。在实现过程中往往需要借助一个队列来完成遍历,算法图解如下:1.将根节点入队,然后将根节点出队2.出队后将,根节点的左右孩子入队。3.然后一直出队,直到队列为空。再加入每个节点原创 2022-01-17 15:59:10 · 497 阅读 · 0 评论 -
LeetCode入门计划 | 深度优先搜索(Python3)
文章目录简介LeetCode例题1.111二叉树的最小深度2.剑指offer55-i.二叉树的深度3.岛屿的最大面积总结简介深度优先搜索是对图或者树的搜索,主要是按照深度优先,搜索见底之后,在回溯。在理解深度优先时,最好理解递归和回溯之后。再理解这个算法会相对容易些。下图是深度优先搜索遍历树的过程。从A->B->E在回退到B再到F。再回退到B。最后回退到A。然后遍历CD。这就是深度优先搜索啦。LeetCode例题1.111二叉树的最小深度我们先将示例中的树给画出来。深度优先原创 2022-01-15 21:03:05 · 788 阅读 · 0 评论 -
LeetCode入门计划 | 回溯(Python3)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录简介LeetCode例题:1.46.全排列2.77.组合3.78.子集总结简介回溯算法类似于决策树,根据已有条件在列表中做出选择。将每一种可能出现的情况列举出来。长用于处理全排列问题。例如将[1,2,3]的全排列画出来如下图所示:在第一阶段,我们的选择有,1, 2,3 三条路劲可以选择。例如选择了第一条1,接着第二阶段有2,3两个选择,如果选择2,最后就只能选择3,如果选择3,就只能选择2。假如第二阶段选择2,则第三阶段选原创 2022-01-13 22:44:45 · 492 阅读 · 0 评论 -
LeetCode入门计划 | 分治(Python3)
文章目录前言一、分治二、LeetCode 例题1.归并排序2.169.多数元素总结前言分治算法是将一个大问题,分解成若干个小问题,再将小问题合并成如干个大问题。也是以中递归的方法。一、分治分治方法如上图所示,分是将一个大问题 分解成子问题,治就是处理分开后的若干个小问题,然后将处理后的问题合并返回。最常见的分治算法就是归并排序。如下图所示:先将数组分解一个元素,一个数字是有序的,然后合并另一个数字,保证两个数字有序,然后依次类推。得到这个数组有序。下面我们开看看代码.二、LeetCode原创 2022-01-11 21:40:17 · 601 阅读 · 0 评论 -
Leetcode 入门计划 | 递归 (Python3)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、递归是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、递归是什么?递归的四要素:接受的参数,返回值,终止条件,递归拆解:如何进入到下一层二、使用步骤1.引入库代码如下(示例):import nu原创 2022-01-10 20:06:35 · 638 阅读 · 0 评论 -
LeetCode 入门计划 | 滑动窗口 (Python3)
文章目录前言一、什么是滑动窗口二、LeetCode例题1.209. 长度最小的子数组2.1456.定长子串中元音的最大数目总结前言滑动窗口算法,多用于处理定长的数组问题,例如定长子数组的最大合,等等。我们今天来学习学习它。一、什么是滑动窗口滑动窗口更像是一种技巧,用于解决数组中的定长问题。如下图所示:上图是滑动窗口长度为3,求解窗口中和的例子,每次滑动时,只需减去移除的元素,加上新滑到的元素即可。下面我们做两到例题来学学它。二、LeetCode例题1.209. 长度最小的子数组解原创 2022-01-09 18:09:50 · 938 阅读 · 0 评论 -
LeetCode入门计划 | 二分法(Python3)
文章目录前言一、二分查找二、LeetCode例题1.704. 二分查找2.35. 搜索插入位置3.162. 寻找峰值4.74. 搜索二维矩阵总结前言二分查找,是用来在有序数组中来查找目标值的,能有效降低算法复杂度,提升查找效率。一、二分查找二分查找如下图所示:查找过程是将 low 和high的中间值与目标值target比较,在根据条件来移动low 或者high。最后查询到target的值。二、LeetCode例题1.704. 二分查找该题就是实现一个二分查找。解题思路:该数组是一原创 2022-01-08 16:04:47 · 448 阅读 · 0 评论 -
LeetCode入门计划 | 双指针(Python3)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、双指针——普通指针二、双指针——对撞指针二、双指针——快慢指针总结前言双指针是算法入门,用于处理数组,字符串等问题。我们今天来学习学习它。并用对应的例题来实践一下。一、双指针——普通指针就是两个指针往一个方向移动。常见的就是两个for 循环的嵌套了。上图所示,i,j 指正移动遍历数组题目:这题的解法有很多,但我们只使用普通指针的解法。解题思路: **两个for循环** #该方法能过测试的方原创 2022-01-07 20:53:05 · 4236 阅读 · 0 评论 -
使用Hash模板法快速计算子串出现的次数
快速查找子串出现的次数首先我们来看问题描述:给定两个字符串A,B。计算字符串B,在字符串A中出现的次数。这题的第一种思路就是循环遍历字符串A,当在A 中找到字符串B的首字母,再往下逐一匹配,如果匹配过程中发现不一致的就跳出循环,如果完全匹配,count就加1。这样的匹配过程显然是很繁琐,很慢的。今天我们讨论一种快速的方法,就是将字符串通过Hash公式映射成数字,通过比对数字,判断字符串时候匹配。那么我们先来看一下如何映射:假设我有字符串hello world。一、pandas是什么?示例:pan原创 2021-07-07 21:01:56 · 321 阅读 · 0 评论 -
Vigenere密码
一、Vigenere密码16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密码。Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。单一字母替换通过字母频率分析很容易被破解,Vigenère使用的方法是,有秘钥和明文,明文字符的替换是根据秘钥对应字母来替代。假设现在有秘钥TIG,明文ABB。那么对ABB进行加密的过程如下。ABCDEFGHIJKLMNOPQRST原创 2021-07-05 20:05:50 · 2657 阅读 · 0 评论