左成云算法基础班(python)
bo.qiu_xbw
Talking is cheap ,show me the code.
展开
-
左成云算法进阶班(1)-KMP (python)
问题:给定一下两个字符串str(n位)与ptr(m位),求ptr在srt中出现的次数或者其出现的位置str = “ababacababadababadadda”;ptr = “ababad”;暴力破解的时间复杂度是O(n*m),可以用KMP算法去简化。下面简述一下KMP算法的思路。1.next数组是怎么产生的?next第一位是-1,第二位是0,长度和子串长度一致。假设i-1前面已经产生了最大的子串的长度cn,那么首先比较cn后面的字符(其实就是str2[cn])是否等于第i-1位置的字符(因为从0原创 2020-07-16 22:00:56 · 333 阅读 · 0 评论 -
数组中的和累加是否等于aim (python)
给你一个数组arr,和一个整数aim。如果可以任意选择arr中的 数字,能不能累加得到aim,返回true或者false思路:每个数字可以选择选或者不选,f(0,0)是起始位置,f(1,0)表示当前是第一个位置,但是第0个数我没选def dfs(arra,i,sum_,target): if i==len(arra): return sum_==target else: return dfs(arra,i+1,sum_,target) or dfs(arra,i+1,sum_+arra[i,原创 2020-07-12 19:53:30 · 200 阅读 · 0 评论 -
矩阵最短路径
问题:给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径和中最小的路径和。import numpy as npdef f(matrix, i, j): #到达最右下角 if i == len(matrix)-1 and j == len(matrix[0])-1: return matrix[i][j] if i == len(matrix)-1: return f(matrix,原创 2020-07-12 10:13:53 · 426 阅读 · 0 评论 -
1353. 最多可以参加的会议数目 python
给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意,一天只能参加一个会议。请你返回你可以参加的 最大 会议数目。思路:按照结束时间进行排序,对于第 ii 天,如果有若干的会议都可以在这一天开,那么我们肯定是让 endDayendDay 小的会议先在这一天开才会使答原创 2020-07-11 14:10:29 · 377 阅读 · 0 评论 -
项目的最大收益(python)
贪心思路:其实建堆是比较好的,但是python的堆有点鸡肋,所以用list去代替了,主要就是构建一个项目,将benjin与zhuanqian去捆绑,健在一个cost按照benjin排序,一个profit按照利润最大排序,然后就好了。链接里有伪代码https://blog.csdn.net/weixin_41362649/article/details/94637472benjin = [20,10,30]zhuanqian = [21,15,33]#这道题如果用python的话,建议还是用比较器和原创 2020-07-11 13:28:04 · 921 阅读 · 0 评论 -
切金条最省铜板问题(python)
题目是:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如 长度为20的 金条,不管切成长度多大的两半,都要花费20个铜 板。一群人想整分整块金 条,怎么分最省铜板?思路比较简单:建造一个最小堆(用数组也能实现,主要就是为了取出最小的两个数),然后把这两个数求和放在原数组在取出最小的两个数,直到只剩下最后一个数。from heapq import *res = []for i in k: heappush(res, i)out = 0while len(res) > 1:原创 2020-07-11 12:17:21 · 236 阅读 · 0 评论 -
前缀树Trie (python版本)(leetcode 208题)
class TrieNode(object): def __init__(self): self.path=0 self.end=0 self.map=[None for i in range(26)]class Trie: def __init__(self): """ Initialize your data structure here. """ self.root=Tr.原创 2020-07-08 20:16:59 · 165 阅读 · 0 评论 -
计算完全二叉树的节点个数(python)
用O(n)的时间复杂度就不说了,这里说用小于O(n)的时间复杂度。def nums_node(root): if not root: return None return bs(root,1,max_height(root,1))def bs(node,level,height): #开始level=1 #height是一个不变的值,可以看做是一个全局变量,代表树的最大深度。 if level==height: return 1 #如果右边子树的最左节点到底了 #说明左边子树是满原创 2020-06-30 22:08:44 · 651 阅读 · 0 评论 -
判断一棵树是否是完全二叉树(python)
核心思路:1.如果有右节点,没有左节点,直接返回False2.如果左右节点都没有,或者只有左节点,就看看后面的节点,必须是叶节点,不能有子节点。(就是看看这是不是最后一排。)res=[root]flag=0while res: tmp=res.pop(0) if tmp.left: res.append(tmp.left) if tmp.right: res.append(tmp.right) if tmp.right and not tmp.left: return Fals原创 2020-06-30 21:35:41 · 2648 阅读 · 0 评论 -
左程云基础班python(第一第二节)
https://blog.csdn.net/zhanzi1538/article/details/106461881转载 2020-06-28 21:53:53 · 1520 阅读 · 0 评论 -
python版比较器(左成云第三讲重点)
import functoolsclass Student(object): def __init__(self,name,age,classnum): self.name = name self.age = age self.classnum = classnum # 年龄按照从小到大排序 def sort_age(a,b): return a.age - b.age # 先按照班级排好,再按照年龄从大到小排好 def class_and_age(a,b): if a.cl原创 2020-06-23 21:47:21 · 446 阅读 · 0 评论