-
【python设计模式-创建型】抽象工厂模式
所属栏目:[Python] 日期:2020-12-20 热度:181
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它[详细]
-
【python设计模式-创建型】单例模式
所属栏目:[Python] 日期:2020-12-20 热度:99
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对[详细]
-
【python设计模式-创建型】工厂方法模式
所属栏目:[Python] 日期:2020-12-20 热度:130
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 ? 意图:[详细]
-
【python设计模式-创建型】建造者模式
所属栏目:[Python] 日期:2020-12-20 热度:84
建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 介绍 意图[详细]
-
hash算法的应用
所属栏目:[Python] 日期:2020-12-20 热度:77
一、单词模式匹配 描述:单词模式字符串为“一二二一”,目标字符串为"苹果 香蕉 香蕉 苹果"则匹配成功 a=[1,2,1,3 ]b =[ ' x ' , y z ' ] def word_pattern(a,b): # 如果a,b长度不一致则直接返回False if len(a)!= len(b): return False 用来存储映射关系[详细]
-
一文弄懂数组的和
所属栏目:[Python] 日期:2020-12-20 热度:135
方法一:双指针法,先要对数组进行排序 a=[12,6,8,1,4,3 ] def sum2(a,target): res = [] a = sorted(a) l,r =0,len(a)-1 while l r: tmp = [0,0] if a[l]+a[r]== target: tmp[0] = a[l] tmp[ 1]= a[r] res.append(tmp) l +=1 r -=1 elif a[l]+a[r] target:[详细]
-
二分查找
所属栏目:[Python] 日期:2020-12-20 热度:101
a1=[1,3,4,8,12 ] def search(a,x): l,r = 0,len(a) while l r: mid =(l+r)//2 if a[mid]== x: return " 找到了,位于第%d位置 " % (mid+1 ) elif a[mid] x: l =mid+1 else : r = mid 没有找到 " print (search(a1,8)) ?[详细]
-
双指针--合并两个排序数组
所属栏目:[Python] 日期:2020-12-20 热度:62
a1=[1,3,4,8,12 ]a2 =[2,5,7,10,12,14 ] import copyans = copy.copy(a1)p = 0q = 0 while plen(a1) and q (len(a2)): if a2[q] a1[p]: p +=1 else : ans.insert(p + q,a2[q]) q +=1 print (ans+a2[q:]) ?[详细]
-
深度优先遍历--最大路径和
所属栏目:[Python] 日期:2020-12-20 热度:156
首先是树的建立 class TreeNode: def __init__ (self,x,left=None,right= None): self.val = x self.left = left self.right = rightt3 =TreeNode(10);t4=TreeNode(12 )t5 =TreeNode(2);t6=TreeNode(1 )t1 =TreeNode(2,t3,t4);t2=TreeNode(-2 ,t5,t6)root =T[详细]
-
深度优先遍历--最大的岛屿
所属栏目:[Python] 日期:2020-12-20 热度:113
问题描述:给定一个二维矩阵,0表示水,1表示陆地,一个岛屿是指相邻的上下左右的陆地面积,求最大的岛屿 a=[[1,1,1 ,0],[ 1,1)">],[0, 1,0]]area = 0 def maxAreaOfIsland(a): # 记录地图的行,列 row= len(a) col = len(a[0]) for i in range(row): for j[详细]
-
动态规划--0,1背包问题(再也不怕类似背包问题了)
所属栏目:[Python] 日期:2020-12-20 热度:187
这种类型问题 三大要素:总重量、每件物品重量、每件物品价值, 问最终能够塞进背包中的价值最大是多少?应该怎么选择物品? 当然也不一定是这些,例如上节所说的矿工挖矿:总人数、挖每座矿的人数、每座矿的金子数。 也就是说,只要出现了这三大要素,都可[详细]
-
最短路径之Dijsktra算法(python)
所属栏目:[Python] 日期:2020-12-20 热度:102
定义: 起始位置:A 终止位置:F 持久集合:permanent = set() 暂时集合:temporary = set() ? ? ? ? ? ? ? ? ? 首先将起始位置A加入永久集合,并将A的距离设为0, 此时遍历A的邻接节点[B,C,E],找到其距离A最短的节点B,将B插入到永久集合中,并更新B的距离[详细]
-
回溯法--查找某单词
所属栏目:[Python] 日期:2020-12-20 热度:153
print(findWord(array,query)) 最后输出结果:True ?[详细]
-
深度优先遍历--怎么抓住小偷
所属栏目:[Python] 日期:2020-12-20 热度:57
问题描述:每栋别墅以二叉树的结构建立,每个节点的值是财富值,小偷不能够偷相接的别墅,问小偷最多能够偷多少财富值? ? 有个规律:每一个节点的偷值都是:左侧子节点的不偷值+右侧子节点的不偷值+该节点的值;不偷值:左侧子节点的最大值+右侧子节点的最大[详细]
-
动态规划--爬楼梯问题(入门)
所属栏目:[Python] 日期:2020-12-20 热度:148
动态规划算法要求将求解问题拆分为一系列相互交叠的子问题。 动态规划三要素: 最优子结构 边界 状态转移函数 问题描述:假设有n层台阶,你每次能爬1层或者2层,问你又多少种方法到达n层? 第一层:1种,记为f(1)=1(边界) 第二层:2种(走2步或走两个1步)[详细]
-
贪心法--哈夫曼编码
所属栏目:[Python] 日期:2020-12-20 热度:136
现有五个节点:A B C D E以及对应的权值,如何建立一颗huffman树进行哈夫曼编码? 基本思路:每次选取其中最小的两个权值的和作为左右节点,比如0.1+0.15=0.25,再从0.2,0.2,0.25,0.35中选取两个最小的,以此类推。编码的时候,从上往下,如果是左孩子就记[详细]
-
动态规划--矿工挖矿
所属栏目:[Python] 日期:2020-12-20 热度:200
动态规划三要素:边界、最优子问题、状态转移方程; 问题描述:现有10个矿工,5个金矿,每个金矿有对应金子和需要开采的人数,问你最多能够获得多少金子? 这是一个典型的动态规划问题,动态规划的核心是如何将问题转换为重叠的子问题,并且写出状态转移方程[详细]
-
贪心法--零钱找零问题
所属栏目:[Python] 日期:2020-12-20 热度:50
问题描述:现在有2元、1元、0.5元、0.2元、0.1元、0.05元的纸币,如何才能使得找零的的张数最小 基本思路;将纸币从大到小排序,尽可能地先找大额的; coins = [ 2 , 1 ,1)">0.5 ,1)">0.2 ,1)">0.1 ,1)">0.05 ]money = 5.65 def coinChange(coins,money): cou[详细]
-
回溯法--八皇后问题
所属栏目:[Python] 日期:2020-12-20 热度:59
def queene(n): # 生成一个一维数组,下标存储行,值存储列 helpQueene([-1]* n,n) helpQueene(columnPositions,rowIndex,n): global count 回溯标志,即N个皇后都找到了相应的位置 if rowIndex == n: 计算总共有多少种 count+=1 打印输出 printSolution(col[详细]
-
回溯法--全排列
所属栏目:[Python] 日期:2020-12-20 热度:177
a=[1,2,3 ]n = len(a)res = [] def permutation(a,solution): # 注意,这里要用global修饰res,才能更新结果 global res if len(a)== 0: res.append(solution) return for i in range(len(a)): newsolution =solution+ [a[i]] new_a =a[:i]+a[i+1 :] permuta[详细]
-
广度优先遍历--选课的智慧
所属栏目:[Python] 日期:2020-12-20 热度:148
问题描述:我们要学习计算机基[详细]
-
【python-动态规划】0-1背包问题
所属栏目:[Python] 日期:2020-12-20 热度:130
给定n个元素的重量和其对应的价值,将这些物品放在一个容量为W的背包中,并使得总价值最大。 数组val [0 . . n - 1]和wt [0 . . n - 1],它们分别代表价值和重量。 总重量W代表背包容量, ? 之前也写过0-1背包问题:https://www.cnblogs.com/xiximayou/p/1200[详细]
-
广度优先遍历--合法的括号
所属栏目:[Python] 日期:2020-12-20 热度:106
问题描述:s="(a)(b)))",通过移除最少量的括号,使得该字符串为合法的字符串,即括号要配对。 首先我们要有一个判断该字符串是否是合法的函数: def isvalid(s): count = 0 for i in s: # 若是左括号,则count加1 if i== " ( " : count +=1 elif i== ) : 如[详细]
-
贪心法--活动安排问题
所属栏目:[Python] 日期:2020-12-20 热度:131
问题描述:现有一批活动,有开始时间和结束时间,如何合理的安排使得尽可能多的活动得以开展; 活动 讲座 会议 演出 电影 辩论赛 考试 开始时间 1 3 0 5 7 结束时间 4 7 6 8 解题思路:如何才能保证安排更多的活动呢?肯定是越早结束越好。所以首先对结束时[详细]
-
树的遍历
所属栏目:[Python] 日期:2020-12-20 热度:131
首先是树的建立: class TreeNode: def __init__ (self,x,left=None,right= None): self.val = x self.left = left self.right = right t7=TreeNode(7);t8=TreeNode(8) t3=TreeNode(3);t4=TreeNode(4,t7,right=None);t5=TreeNode(5,right=t8);t6=TreeNode(6)[详细]
