
python
中南自动化学院至渝
好记性不如烂笔头,多写写
展开
-
21. 合并两个有序链表 23. 合并K个升序链表【每日一题】
21. 合并两个有序链表思路 思路比较简单常规思路,和合并有序数组一样,分别去一个出来,然后比大小,结果加入小的一个,小的对应链表一个取新的出来,继续比较,直到其中一个比完了class Solution: def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[List原创 2022-03-15 17:19:35 · 15619 阅读 · 0 评论 -
647. 回文子串 5. 最长回文子串 【每日一题】
647. 回文子串 思路 重点是怎么统计回文子串,这儿用一个巧妙的定义 ,就是说我定义一个函数,计算以字符串第i个字符为中心的回文串个数,和以i i+1为中心的回文串长度以i为中心是考虑到 ABCBA型,即回文串是奇数个以i i+1为中心则是 ABBA型 ,回文串为偶数 有了这个我们只要遍历给的字符串的所有位置,进行累加原创 2022-03-15 16:58:26 · 15191 阅读 · 0 评论 -
如何判断一个元素同时存在于两个列表,或者如何得到同时存在于两个列表中的所有元素
问题 很多时候我们要判断两个列表是否同时存在一些元素,这些元素可能是两个列表的共同点,比如一个简单例子,每个列表是一个人,列表元素是这个人的一些特质,我们需要根据某些特质相同来拿聚类。问题: 怎么得到同时存在于两个列表中的所有元素?方法1 直接暴力找 最容易想到的肯定是双重循环for i in list1: fo原创 2022-03-14 10:07:49 · 16031 阅读 · 0 评论 -
144. 二叉树的前序遍历 94. 二叉树的中序遍历 145. 二叉树的后序遍历【每日一题】
144. 二叉树的前序遍历思路 都是递归;没得说,搞清楚前、中、后序的定义就懂了,为了更贴合,和更好解释,我这儿用c++写,改成c python都差不多,python太简洁反而不美。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; *原创 2022-03-10 15:57:47 · 15984 阅读 · 0 评论 -
798. 得分最高的最小轮调【每日一题】
798. 得分最高的最小轮调思路思路1遍历所有下标,计算对应的分,选最高的,每次就是先构造新的nums出来,然后放到函数里面计算得分,这个得分也要遍历, N^2 估计不能过a=0b= len(nums) nums[0:b-1,],temp[b] = nums[1:b], nums[0]思路二我们注意到 0 <= nums[i] < nums.length,那么换句话说每次吧最前面的那个数移到最后,必然得分,移位前和移位后有啥联系呢,ennnm,移位后原创 2022-03-09 15:53:30 · 15079 阅读 · 0 评论 -
2055. 蜡烛之间的盘子 【每日一题】
2055. 蜡烛之间的盘子思路 我们要怎么才能得到中间的盘子数呢,显然有个烟雾弹是两个蜡烛,其实我们只要知道这个区间[start,end]从前往后的第一个| 前面的盘子数 和从后往前的第一个| 之前的盘子数就行了,在蜡烛中间的盘子数等于后者减前者,只要想到这儿就基本代码出来了, 问题是怎么才原创 2022-03-09 15:46:19 · 15096 阅读 · 0 评论 -
1319. 连通网络的操作次数 547. 省份数量 200. 岛屿数量 1202. 交换字符串中的元素 【每日一题】【并查集集合】
先来两道标准的并查集题目,只需要写好模板,然后一个个遍历联通,最后返回连通域数量就行1319. 连通网络的操作次数思路 n台电脑只要有n-根线就一定能找到某种操作方式联通,那么这个操作次数是多少呢,其实我每次用一根线就能把两个不连通的连通域连在一起,拿答案就出来了,返回连通域个数-1,直接原创 2022-03-07 22:48:25 · 15115 阅读 · 0 评论 -
math模块的pow()计算幂时提示OverflowError: math range error (python)
背景 刷题的时候用 ** 提示超时,就想着利用 python的 math 模块偷个懒,因为math.pow() 始终调用c语言写的那个代码,时间复杂度老低了,可能会加快速度,但是出现了错误,没办法只能手写快速幂错误原因 math.pow()函数计算幂运算,因为结果数值过大导致溢出。解决办法原创 2022-03-07 09:47:38 · 18013 阅读 · 0 评论 -
50. Pow(x, n) 快速幂【每日一题】
50. Pow(x, n)思路 快速幂的实现,思路很简单,类比了二进制数转十进制的法子,比如 1001 = 1 * 23+0 * 22+0 * 21+1 * 20。那么xn,你假设 n=5 ,n = 101是吧,x^5 = *x^(4*1) * x^(2*0) * x^(1*1)那不就是把 n 对应 1 的位置相乘嘛,因为任何数的0次方都是1,所以0的位置可以不用管,而且,基数是从x^1-原创 2022-03-07 09:39:30 · 15192 阅读 · 0 评论 -
504. 七进制数【每日一题】
504. 七进制数思路 所有的进制转换都可以用辗转相除法解决,就硬生生模拟辗转相除法代码class Solution: def convertToBase7(self, num: int) -> str: if num == 0: # 特殊判断 return "0" ans=[] flag = ""原创 2022-03-07 09:19:11 · 14996 阅读 · 0 评论 -
2100. 适合打劫银行的日子 【每日一题】
2100. 适合打劫银行的日子思路 第i 天可不可以打劫,取决于前面有几个非递增的,后面有几个非递减的,换句话说我只要知道第i个位置前面非递增序列个数 和后面非递减个数就可以了,值得注意的是恰好后面非递减是从后往前的非递增,所以思路就出来了1、计算每个位置从前往后的非递增长度数组2、计算每个位置从后往前的非递增长度数组(其实就是从前往后的非递减了)3、遍历所有位置,比较对应位置长度是不是满足代码c原创 2022-03-06 22:52:34 · 15002 阅读 · 0 评论 -
替换连续出现n次的字符(正则)【字节笔试】
我发现一个发现拼写错误的捷径:三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC举例说明strlist = "wooooooow"strlist = re.sub(r"([a-z])\1.原创 2022-03-06 21:54:16 · 15556 阅读 · 0 评论 -
344. 反转字符串 541. 反转字符串 II 557. 反转字符串中的单词 III【每日一题】
344. 反转字符串 541. 反转字符串 II557. 反转字符串中的单词 III334思路 344 他叫你必须原地修改输入数组,那么就是说直接调函数reversed() 不行,明显这种前后交换就是一个双指针,交换前后。前面的往后走,后面的往前走class Solution: def reverseString(self, s: List[str]) -> None: """原创 2022-03-04 16:37:42 · 15260 阅读 · 0 评论 -
2104. 子数组范围和 【每日一题】
2104. 子数组范围和思路 暴力模拟,没次都找到以i开头j结尾的最大值最小值,然后再最终结果上加上这个差值,代码class Solution: def subArrayRanges(self, nums: List[int]) -> int: ans= 0 for i in range(len(nums)): # 不断加上以第i个数开头的子数组范围之差原创 2022-03-04 11:10:56 · 14976 阅读 · 0 评论 -
135. 分发糖果 【每日一题】
135. 分发糖果思路 两次遍历,先从左到右计算出每个人的糖果数,这一步就是后一个比前一个大就在前一个基础上+1,不然置为1,从这个思路来来看,我们这一趟酒吧升序的给基本算好了,但是降序的我们现在全是1。 我们就从右到左遍历一次,这一次,前一个比后一个大,就在后一个的基础上+1,否则就是置1,然后得到从后往前原创 2022-03-03 09:48:34 · 14900 阅读 · 0 评论 -
258. 各位相加 【每日一题】
258. 各位相加思路 我只想到最容易的解法,就是先每个位计算得到一个和。再把这个和当成新的数继续求和 直到这个和小于10 ,代码有两种写法,一种就是定义一个函数计算一个大于10的各位求和,一种就是不封装成函数代码封装成函数的class Solution: def addDigits(self, num: int) -> int: if num<原创 2022-03-03 09:29:22 · 15167 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置【每日一题】
34. 在排序数组中查找元素的第一个和最后一个位置思路 没啥说的,就是左边界二分找左边界,右边界二分找右边界,二分这块内容,理解容易,细节魔鬼,我觉得我已经明白了,这次做还是犯了一个细节错误在右边界查找的时候代码class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]:原创 2022-03-02 22:34:30 · 14934 阅读 · 0 评论 -
2016. 增量元素之间的最大差值 【每日一题】
2016. 增量元素之间的最大差值思路1 其实就是计算每个元素和该元素后面的最大值的差,然后每次都更新这个最大值,简单题都容易理解class Solution: def maximumDifference(self, nums: List[int]) -> int: ans=-1 for i in range(len原创 2022-02-26 21:17:59 · 14891 阅读 · 0 评论 -
1385. 两个数组间的距离值 【每日一题】
1385. 两个数组间的距离值思路1 循环遍历看是不是距离都满足大于d,都满足就+1,你满足就不加1代码class Solution: def findTheDistanceValue(self, arr1: List[int], arr2: List[int], d: int) -> int: # 暴力法 ans = 0原创 2022-02-26 10:08:06 · 14998 阅读 · 0 评论 -
832. 翻转图像 【每日一题】
832. 翻转图像思路 顾名思就是把一个二维数组每一行都倒序,然后黑白色颠倒(二值图像吗,就是0变1,1变0),1、list 反序 ,简单。直接 list[::-1]就有了2、0变1,1变0也好办,要是numpy的数组,直接利用 1-array就行了,但是这个是列表就稍稍麻烦点,用map做一个映射,即(list(map(lambda x:1-x,list))代码class S原创 2022-02-26 09:45:25 · 15241 阅读 · 0 评论 -
537. 复数乘法 【每日一题】
537. 复数乘法思路 这是一道披着中等难度外衣的简单题,直接模拟就完事,两个复数相乘,实部*实部-虚部*虚部=结果的实部,实部*虚部+实部*虚部=结果的虚部,唯一需要注意的点就是怎么获得实部和虚部,并将其转换为实数代码方法1 利用字符串分割和切片的手段来确定实部和虚部class Solution: def complexNumberM原创 2022-02-25 09:45:06 · 15717 阅读 · 0 评论 -
1706. 球会落何处 【内日一题】
题目链接思路 就模拟,硬生生的模拟1、遍历所有的入口的球 1-1 对于每个球,我们分别模拟,只有两种情况, 向左的挡板or向右的 a、向左 就看前一个是不是向左,是就可以到下一行 不是,卡住,在这儿要记得判断前一个是不是都到箱子最左边了 b、向右 就看后一个是不是也向右,事就能到下一行,接着判断原创 2022-02-24 14:51:00 · 14893 阅读 · 0 评论 -
字符串提取两个关键字中间的所有字符
背景 在做一个淘宝的商品信息收集是用到了,说多了要被屏蔽,直接给代码吧目的 我有一堆字符串关键字1***************关键字2 我想提取出来两个关键字中间的内容 ,比如 "p4pTags"XXXXXXXXXXXX"icon"这种代码import repattern=re.compile(r"关键字1(.*?)关键字1",re.S原创 2022-02-24 10:44:29 · 16365 阅读 · 0 评论 -
917. 仅仅反转字母 【每日一题】
题目链接 917. 仅仅反转字母思路 1、先得到去掉非字母的字符串,这一步用正则就可以了2、然后反转字符串3、遍历原来的字符串,遇到是字母就加入反转的字母,不是字母的就加入非字母字符的本身(这一步就是在反转字母字符串中加入那些非字母的字符)4、转换成字符串返回完整代码class原创 2022-02-23 15:48:07 · 14844 阅读 · 0 评论 -
838. 推多米诺 【每日一题系列】
为了节约时间,我就直接放题目链接了,反正看着东西的要么是特意来找的,要么是一起刷题备战实习和秋招的 题目链接代码 思路写在代码注释里面了class Solution: def pushDominoes(self, dominoes: str) -> str: dom = 'L'+dominoes+'R' # 添加两个虚拟节点更方便处理原创 2022-02-21 16:52:22 · 14936 阅读 · 0 评论 -
xpath 利用类名来选择定位元素时,必须把所有类名都包含写到代码才能找到
背景 在写一个爬取京东商品信息的爬虫,在定位元素时我只用了一个来定位,发现返回值时none,所以记录下,初学者,踩坑代码错误示范canshu = xq_se.xpath('//div[@class="p-parameter"]/ul[@class="parameter2"]')正确示范canshu = xq_se.xpath('//div[@class="p-parameter"]/ul[@class=原创 2022-02-11 14:07:16 · 15647 阅读 · 0 评论 -
解决 Attempt to overwrite cell: sheetname=\‘sh\‘ rowx=1 colx=5 问题
问题出现原因 出现这个错误提示,一般是代码执行了向已经有数据的单元格中又写入数据,如果你并没有这样的想法,那么很大可能是你的行或者列在增长时出错了,建议检查一下就能解决。 如果你确定自己需要覆盖写入数据,请看解决方法解决方法 使用 cell_overwrite_ok=True 来创建原创 2022-02-11 13:57:04 · 17988 阅读 · 0 评论 -
xpath 获取一个大标签下的所有文字
背景 写一个爬取京东商品信息的爬虫代码,再爬取商品介绍时里面事 ul 下面很多 li 放描述信息,一个个取太麻烦,就想着一下取出来,用字符串的一些方法来处理。方法canshu = xq_se.xpath('//div[@class="p-parameter"]//ul[@class="parameter2 p-parameter-list"]') # 找到ul所在位置 data = canshu.xp原创 2022-02-11 13:48:38 · 15868 阅读 · 0 评论 -
判断一个字符串是否含有数字 python
代码主要利用了正则的匹配 ,re.search会在给定字符串中寻找第一个匹配给定正则表达式的子字符串。函数的返回值:如果查找到则返回查找到的值,否则返回为None。import reif bool(re.search(r'\d', string)): do something同理,是否含有非数字if bool(re.search(r'\D', string)):是否含有单词字符if bool(re.search(r'\w', string)):更多匹配可以见...原创 2022-01-27 13:44:40 · 16367 阅读 · 0 评论 -
离散状态转移算法(DSTA)python版实现
背景 所有的随机优化算法(GA、ABC、PSO、STA、模拟退火)都是一个套路通过当前的一个解或者一些产生一堆新的候选解,这一步叫产生候选解然后通过某个评价函数(评价标准)更新解,就是找一堆里面好的一个或者一些,这叫更新当前解不断循环,直到满足终止条件 可以先看看 连续状态转移算法(STA)的实现(python版)原创 2021-12-18 21:31:42 · 19193 阅读 · 0 评论 -
离散状态转移算法(DSTA)的一点尝试,随机多次左移算子测试(说实话,我感觉和一次的左移,区别不明显,有点点提升,但又好像没有)
背景 心血来潮,想到这个算子,就测试一下。灵感来自于原始DSTA中的平移算子,原始的有四个算子,大概如下思路 你能做一次左移,那我做两次不也可以吗,三次也可以嘛。又想到,干嘛在代码里面写死循环多少次呢,干脆随机次左移吧,次数不超过要移动序列的最大长度就行(主要是超过了其实就又循环回去了)文件结构代码otherli原创 2021-12-17 15:43:45 · 18816 阅读 · 0 评论 -
连续状态转移算法(STA)的实现(python版)
背景介绍 所有的随机优化算法(GA、ABC、PSO、STA、模拟退火)都是一个套路通过当前的一个解或者一些产生一堆新的候选解,这一步叫产生候选解然后通过某个评价函数(评价标准)更新解,就是找一堆里面好的一个或者一些不断循环,直到满足终止条件算子原创 2021-12-16 13:54:26 · 22235 阅读 · 0 评论 -
frechet 距离(狗绳距离)代码实现与优化(只是简单的优化,比递归提高9倍速度)
背景 看论文看到了这距离的作用,就试着学了一下,然后又恰巧发现这东西是个二维的dp 就用之前学的dp优化方法搞了一下。 这个距离的定义我就不讲了,数学描述烧脑子,有兴趣自己去看。直觉定义我放这儿。一个人在遛狗,他们走在各自的道路上。他们可能有着不同的速度,但是都不能往回走。最终的目的,就是求满足要求的绳子的原创 2021-12-15 15:22:59 · 22466 阅读 · 5 评论 -
多张图片变gif python
背景 我再运行算法时保存了一些图(每张图的名字时以迭代次数命名的),然后想着 动图方便些,容易给人直观的感受,所以留个备份import imageiogif_images = []for i in range(0, 1500): gif_images.append(imageio.imread("./picture/"+str(i)+".png")) # 读取多张图片imageio原创 2021-12-13 15:28:07 · 20511 阅读 · 0 评论 -
python按文件后缀进行分类,解放生产力
背景 上交的材料里面有很多内容, 现在需要统计所有的文件,按文件后缀进行分类,上交到上面去效果代码 主要了 tk 实例选择文件夹,os.listdir 获取所有文件,os.path.splitext 得到后缀 , endswith 结合列表推导式得到指定后缀结尾的文件原创 2021-11-15 09:31:44 · 20862 阅读 · 0 评论 -
处理pandas吧整数读取成了字符串
背景 在处理下载后的数据,由于下载的格式不统一,导致难以进行,原始数据如下 问题 用 如下代码读取,但是第一列莫名其妙了字符串import pandas as pddata = pd.read_c原创 2021-11-12 09:45:14 · 22833 阅读 · 0 评论 -
Python 跨文件使用变量 用lambda 来实现
背景 在做一个把实验室代码改成面向对象的版本,存在一个问题,我希望我给一个解,我的评价函数就给出一个值,即在算法的迭代过程中只需提供解即可,但是我们知道,计算过程往往需要其他信息。 我在做的旅行商问题就是这样,处理一个解,还要一个坐标矩阵A,但是我肯定不希望这个A进入到我们算法里面,污染我的算法类otherlib.pyimport numpy as npi原创 2021-11-01 21:50:26 · 20237 阅读 · 2 评论 -
python 字典剖析。里面究竟是怎么存的
背景 继上次的list 列表 最终总结 python中 list 到底是怎么实现的,内存里面是怎么存放的 之后,还是把字典 dict 给捋了一遍正文 dict 有两种实现方法,组合模式和分离模式,我们就先探究下组合模式,可以简单理解成他是一个哈希表和一个存键值对的结构体数组,原创 2021-09-26 13:33:26 · 20417 阅读 · 2 评论 -
python 二维列表取某一列 或者计算每一列相加,由于不想数组那样可以直接取,所以麻烦一点
取某一列方法1rel_matrix = [[5,3,4,2,3],[1,5,2,2,3],[3,2,5,2,1],[1,4,2,5,2],[1,2,3,1,5]]k = 2 # 你要取的那一列的下标col = [row[k] for row in rel_matrix]方法2rel_matrix = [[5,3,4,2,3],[1,5,2,2,3],[3,2,5,2,1],[1,4,2,5,2],[1,2,3,1,5]]k = 2 # 你要取的那一列的下标col = list(list原创 2021-09-07 10:13:19 · 25825 阅读 · 6 评论 -
python的入门指南,从python安装——pycharm安装——环境配置——库安装相关,只是整体从0入个门
背景 老板让我带新入学的师弟师妹把 python 入个门,学之前肯定要有一些工具吗,“工欲善其事必先利其器” ,所以就做了一个简单的入门级教程,其实大部分我都写过博客了,只是汇总一下1、安装python 去官网 https://www.python.org/downloads/windows/ 下载你电脑原创 2021-09-01 22:44:58 · 20317 阅读 · 0 评论