
Python算法
仅使用Python内置基础模块进行的算法操作
勤奋的大熊猫
芯片设计及版图布局工程师
接专业问题咨询,有需求的可以私信我,价格可以商量。
展开
-
leetcode 3110 字符串的分数
遍历字符串到倒数第二个字符的索引值处,使用索引值提取当前字符和后一个字符,计算它们的 ASCII 码差值的绝对值并求和即可。该种方法的代码行数较少,但是对于新手可读性较差,本人推荐方法。对象变成了列表对象后再进行求和,两种方法均可。我们使用行内循环去掉对。原创 2024-08-27 16:03:24 · 490 阅读 · 0 评论 -
leetcode 3146 两个字符串的排列差
循环遍历第一个字符串,在第二个字符串中找出第一个字符串中的对应字符的位置,做差,再取绝对值,最后求和即可。上述代码我们用了两次循环,且使用了累加的方式,每次循环进行一次加法运算,这样就会增加时间。方法也是一个遍历的过程,会导致代码需要的时间很长。进入循环,本题中可以缩减至少一半的时间。中使用字典处理字符串就可以避免使用。我们可以尝试使用行内循环将累加变成对。对象的一次性求和,就可以减少时间。上述代码可以实现目的,但是。原创 2024-08-27 15:13:11 · 392 阅读 · 0 评论 -
leetcode 1957 删除字符使字符串变好
中在字符串中做删除元素的操作是很困难的,通常我们都会创建一个新的字符串或者列表,然后进行循环,将不需要被删除的字符添加进新的字符串或者列表中,最后获取结果。的常用技巧中提及了可以生成一个空的字符串来完成这一操作,但是这种方式的用时比使用列表更长。时我们需要判断是否存在连续三个相同的字符,即 s[i] == s[i-1] == s[i-2],在理解了这一层后我们即可写出如下代码。从题目可知,连续三个相同字符出现时,删除第三个字符,那么我们需要分情况,当给定字符串的长度小于。中也可以实现相同的结果。原创 2024-08-27 14:19:24 · 610 阅读 · 0 评论 -
leetcode 169 多数元素
本题较为简单,但是有一些比较有趣的方法,这里特来记录一下。原创 2024-08-26 16:25:39 · 279 阅读 · 0 评论 -
leetcode 560 和为k 的子数组
不够迅速,因此,我们考虑使用其他方式实现。上述方法虽然可行,但是时间复杂度为。需要特别注意的是,这里的。原创 2024-08-26 14:08:35 · 420 阅读 · 0 评论 -
leetcode 438 找到字符串中所有字母异位词
题中要求我们找出所有的异位词并进行存储,而本题我们只需要找出异位词对应的索引值。因此,我们无需用到字典,只需使用列表即可。建于代码并不复杂,这里不做过多说明,读者可以自行理解,如果有问题可以在评论区留言。原创 2024-08-23 17:33:00 · 554 阅读 · 0 评论 -
leetcode 3 无重复字符的最长子串
那么则进行循环,我们使用两个变量进行循环,用来创建一个动态区域,然后判断位于这个动态区域之后的字符是否包含在这个动态区域之内,如果包含,就中断,如果不包含,就把这个字符加入动态区域中,接着判断。如果字符不在字典内,则用字符作为字典的键值记录当前右侧指针所指向的位置,并且记录 右侧指针位置-左侧指针位置 和。本题重点是创建一个动态区间,然后判断位于这个动态区间之外的字符是否被包含在这个动态区间范围内。值的大小,记录更大的值,循环结束后返回。就可以得到无重复字符的最长子串的长度。的情况要重点进行讨论。原创 2024-08-23 15:29:56 · 528 阅读 · 0 评论 -
leetcode 49 字母异位分词
首先,我们创建一个字典对象,然后遍历整个字符串列表,并且使用sorted()函数对字符串列表进行排序,所有的异位分词经过排序后它们的组成和顺序会趋于一致。但是需要注意的是sorted对字符串进行排序后会变成一个由单个独立字符组成的列表,我们需要使用join将它们重新连接为字符串。进一步我们判断组合后的字符串tmp是否位于我们创建的字典对象dict1中,如果不在,就将原始位于strs中的字符串以值的方式添加进入字典,这里特别需要注意的一点是,一定要以列表类型进行添加。对应下面代码中的。如果tmp在dict1。原创 2024-08-22 11:07:29 · 289 阅读 · 0 评论 -
leetcode 80 删除有序数组中的重复项 II
只是此时因为要求保留重复元素两次,我们的左侧指针可以从第二个数据开始,且右侧指针需要和两个元素的值进行判断。,我们观察到数组是按照顺序排列的,因此,我们可以直接对比右侧指针所指向数据与左侧指针值。的值所指向数据是否相等,相等,则右侧指针右移,不相等,则左侧指针值。并存储右侧指针当前指向的数据。仍旧使用双指针, 思想与。原创 2024-08-22 10:03:49 · 488 阅读 · 0 评论 -
leetcode 26 删除有序数组中的重复项
本题使用双指针解法即可,右指针移动,若右指针所指向元素与左指针指向元素一致,右侧指针继续右移,若右指针指向元素与做左指针指向元素不一致,左指针位置。本题目在理解了双指针后难度较易,这里不再过多说明了。,且令左指针处元素等于右指针处元素。原创 2024-08-22 09:50:22 · 337 阅读 · 0 评论 -
碱基 A 和 C 方式排序
在生物学中,很多时候我们需要对碱基序列进行排序,这里分别介绍。根据排列组合公式可得总共的排序组合数为。根据排列组合公式可得总共的排序组合数为。(可重复排序) 排序和。(不可重复排序) 排序。原创 2024-08-21 16:50:02 · 688 阅读 · 0 评论 -
Python 将单词拆分为单个字母组成的列表对象
这里介绍一个简单算法,将英文单词拆分为其对应字母组成的列表。原创 2024-08-21 16:36:17 · 630 阅读 · 0 评论 -
Leetcode 283 移动零
今天,看到了一个双指针算法,构思非常巧妙。这里特来记录一下。原创 2024-08-19 15:02:58 · 560 阅读 · 0 评论 -
Python 算法------列表对象逆向位移一次后形成的新列表
一文中我们介绍了列表对象中的各元素正向移动一个位置后的新列表算法。这里介绍列表对象逆向位移一次后形成的新列表。逆向移动时,相较于正向移动更加抽象,读者可自行理解。原创 2024-08-19 13:36:00 · 234 阅读 · 0 评论 -
Python 算法------列表对象正向位移 n 次后形成的新列表
一文中我们介绍了该如何获取列表对象正向位移一次后形成的新列表。本文我们将在此基础上介绍如何获取正向位移。这里我们采用文章中给出的方法二。最简单的方式就是在之前的基础上外层加入一个。原创 2024-08-19 13:11:19 · 344 阅读 · 0 评论 -
Python 算法------列表对象正向位移一次后形成的新列表
了,这样做的好处就是可以使得列表对象的索引值头和尾连接起来,方便一些其他的操作。那么我们有没有可能不创建新的列表对象,而完成这一操作呢?今天遇到了一类算法题目,本算法属于个人自己想到的一个算法,使用。库的话可以直接秒掉这个题目,但是此处我们仅使用。中列表对象的最后一个元素的索引值是。对于这个题目我们该怎么进行呢?这里其实我们就可以理解为什么。至此,这一算法我们便完成了。的内置函数来做这道题。原创 2024-08-19 11:14:24 · 268 阅读 · 0 评论 -
Python 合并两个有序数组
数组整体进行排序即可。原创 2024-07-18 17:42:10 · 462 阅读 · 0 评论 -
Python 二进制求和
求解它们的和并以字符串形式显示。首先二进制表示是以字符串形式存储的,那么我们要进行运算,首先应该将二进制转换为。可以省略,但是经过测试,加上后可以加快程序的运行速度。进制状态下运算完成后再转换为。关于进制转换,可以参考这篇。原创 2024-07-18 15:45:10 · 384 阅读 · 0 评论 -
最长公共前缀
遍历这个元素所有的子序列,接下来遍历列表中的所有元素,如果子序列均被其余元素包含,那么更新最长公共前缀,如果子序列不被某些元素包含,说明此时子序列不是公共的子序列,那么返回上一个子序列长度即可。是考虑到,如果列表的第一个元素恰好是最短的元素,且这个最短的元素恰好又是最长的公共前缀,此时前面的循环无法通过。首先我们选取列表中的第一个元素,当然这个元素可能不是最短长度的元素,接下来,我们通过。上刷了一道算法题,这里来展示一下我个人的解法。有问题的小伙伴欢迎留言给我。退出,就需要最后这个。来返回正确的结果了。原创 2024-07-18 12:07:37 · 227 阅读 · 0 评论 -
Python 找出字符串列表中具有最小长度的元素
中我们可以得到字符串列表中具有最小长度元素的索引值。,我们可以直接使用如下代码获取字符串列表中具有最小长度的元素。原创 2024-07-18 11:11:35 · 361 阅读 · 0 评论 -
Python 找出字符串列表中最小长度元素对应的索引值
然后使用 .index() 函数可以获取到该元素位于。可以获取到一个列表,这个列表中有一个元素,该元素是。列表中的元素,且它的长度等于我们之前计算得出的。我们想要找出它中间最小字符串是哪一个该怎么办呢?列表中的最小元素长度。原创 2024-07-18 10:59:04 · 281 阅读 · 0 评论 -
Python 找出字符串列表中元素的最小长度
我们想要找出它中间包含字符串元素最短字符串的大小。事实上,我们也可以使用一行代码完成这个操作。判断即可完成这个过程。原创 2024-07-18 10:24:57 · 356 阅读 · 0 评论 -
Python 获取连续数据的起始索引值与结束索引值
来获取数组中连续数据的起始索引值与结束索引值,每一组连续数据都要有起始索引值与结束索引值。比如上述数组,有三组连续数据(未知参数),我们需要分别记录下它们的起始与结束索引值。至此,我们得到了我们想要的数据。原创 2024-07-09 13:38:28 · 310 阅读 · 0 评论 -
Python 获取数组中连续数据的组数
我们想要获取它中间有多少个连续数据组成的组数,单个元素也算一组。至此,我们得到了结果。原创 2024-07-09 13:26:05 · 276 阅读 · 0 评论 -
Python 在字符串中某个单个字符两侧添加*
这里考虑一个问题,如何在字符串中某个特定字符的两侧添加*。输入:str1 = "abcde"输出ab*c*de在字符c的两侧分别添加*。不同于list方法,对于字符串,我们没有insert()方法可以使用,因此当我们想要向字符串中添加元素时,我们需要使用字符串的高级拼接方法。代码如下:方法一:str1 = "abcde"index = str1.index("c")str1 = str1[:index] + "*" + str1[index:]# 因为已经向其中插入了一个*,所以原创 2022-04-27 15:28:54 · 2316 阅读 · 0 评论 -
Python 去掉列表中小于某个特定值的所有值
今天遇到了一个问题,比如我们有如下一个列表:list1 = [-1, 0, 1, 2]我们想要删除其中所有小于1的元素,即删除-1和0这两个元素。最简单的方法为逐个删除,代码如下:list1 = [-1, 0, 1, 2]list1.remove(-1)list1.remove(0)print(list1)"""result:[1, 2]"""可以看到我们如愿地删除掉了这两个元素,然而这远远不够,因为现在列表一共四个元素,需要删除的元素也只有两个,因此我们可以手动删除。如果我们的原创 2022-04-20 18:40:29 · 9162 阅读 · 0 评论 -
列表元素的平均值
def average(*args): return sum(args, 0.0) / len(args)average(*[1, 2, 3]) # 2.0average(*(1, 2, 3)) # 2.0average(*{1, 2, 3}) # 2.0average(1, 2, 3) # 2.0原理: sum(args, 0.0)表示将输入的参数args全部加起来,0.0表示的是开始的值,也就是说从0开始将args的值全部加起来,这里的args为list(列表)或者tuple(元胞)或原创 2020-08-11 00:00:13 · 9792 阅读 · 0 评论 -
返回一个列表数组,拥有指定的开头和结尾的数字
def find_multiples(lower_limit, upper_limit): return list(range(lower_limit, upper_limit + 1, step))find_multiples(5, 25, 5) # [5, 10, 15, 20, 25] 在实际应用中,通常指定开头结尾的等差数列可以用很多其他方法来实现,比如在导入numpy包的前提下使用np.linspace和np.arange可以实现等同于上述操作的结果。代码如下:import num原创 2020-08-10 23:29:23 · 630 阅读 · 0 评论 -
映射列表元素,并求出映射后列表元素的平均值
这个函数会映射一个列表中的所有元素,并返回映射后列表元素的平均值,想要清晰地理解以下函数,首先需要了解lambda函数和map函数以及列表平均值的求法NB(注意): # 后面的部分表示输出结果def average_by(lst, fn=lambda x: x): return sum(map(fn, lst), 0.0) / len(lst)print(average_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda x:原创 2020-08-11 21:28:38 · 445 阅读 · 0 评论 -
检测列表中的所有元素是否唯一(非原创)
搬砖,引用来源于检测列表中的所有元素是否唯一代码如下:def all_unique(lst): return len(lst) == len(set(lst))x = [1, 2, 3, 4, 5, 6]y = [1, 2, 2, 3, 4, 5]print(all_unique(x)) # Trueprint(all_unique(y)) # False原理:我们知道集合set会将列表中一样的元素剔除重复的仅保留一个,因此如果列表中的元素均为独一无二的,set(lst) == ls转载 2020-08-10 23:13:26 · 1317 阅读 · 0 评论 -
一行代码求出100以内为3倍数的所有数
# method 1print(list(filter(lambda n: not (n % 3), range(1, 100))))# method 2print(list(filter(lambda x: x % 3 == 0, range(1, 100))))filter函数和lambda函数这里不做过多解释,总而言之它会返回值为True的情况。n%3会得到三种结果,0,1,2,我们知道在python中0代表False,任何不为0的数字代表True,因此当n%3==0的时,not (n%3原创 2020-08-12 18:50:02 · 4860 阅读 · 4 评论 -
检测列表中的所有元素是否相等(非原创)
搬砖,引用来源于检测列表中的所有元素是否相等代码如下:def all_equal(lst): return lst[1:] == lst[:-1]print(all_equal([1, 2, 3, 4, 5, 6])) # Falseprint(all_equal([1, 1, 1, 1])) # True原理:我们可以看到当x为一个列表时,lst[1:]的输出结果为第二个元素到最后一个元素,而lst[:-1]输出的结果为第一个元素到倒数第二个元素,因此lst[1:] == lst[:-1转载 2020-08-10 15:32:43 · 1770 阅读 · 0 评论 -
快速求解任意两个整数的最大公约数(gcd)
python求解给定两个数的最大公约数,简单算法问题NB(注意): # 后面的部分表示输出结果代码如下:def euclidianGCD(a, b): while b: swap = b b = a % b a = swap return a# debugprint(euclidianGCD(20, 12)) # 4相比较于暴力方法求解,此种方法的速度更快。...原创 2020-08-13 00:42:12 · 657 阅读 · 0 评论