
python
朋克归零膏
这个作者很懒,什么都没留下…
展开
-
python中的dict和set的实现原理
dict和set都是无序的,他们底层是通过哈希表实现的,理论上他们的时间复杂度O(1)hash tables哈希表(hash tables)是一种数据结构,通过哈希函数将键值(key-value)对进行映射,如下图因此key都应该是可哈希的对象(不可变对象)哈希冲突因为哈希不是唯一的,不同的值经过哈希函数取余之后可能会获得相同的值,这叫哈希冲突。解决方法:开放寻址法、拉链法、再哈希法、建立公共溢出区等...原创 2020-12-10 15:15:47 · 188 阅读 · 0 评论 -
关于python内存管理机制
对象存储在值传递和引用传递测试过python对于不可变对象的存储采用的是缓存机制,对于相同的int、string采用缓存机制,不会为不同对象分配多个内存空间。python对于可变对象,是会分配不同内存地址的。对象引用计数器每个对象都会记录被引用的次数,被引用一次就+1,减少一个引用就-1。通过sys.getrefcount()可以查看引用器。如果是普通对象,计数器从0开始计算。当计数器=0时候,释放内存。也可以用del来删除对象,释放内存。垃圾回收a = [1, 2, 3]del a原创 2020-12-10 01:41:17 · 162 阅读 · 0 评论 -
python函数的值传递和引用传递
值传递和引用传递func(arg1,arg2)在函数中,定义函数的时候写的参数叫形参,调用函数传入的参数叫实参。值传递的意思是实参传递进去的其实是数据对象的一个副本,并不会对原对象产生影响,引用传递是指穿进去的是参数对象的内存地址,因此期间对参数的操作是会对原对象产生影响的。就结论而言,python的不可变对象是值传递,可变对象是引用传递。不像C,可以指定是值传递或是引用传递。python的数据类型在Python中,万物皆对象。python的数据类型可分为 不可变对象 和 可变对象。每个对象原创 2020-12-07 11:18:51 · 313 阅读 · 0 评论 -
flask实践
项目结构│ bbs_demo.py # 视图文件│ config.py # 存放配置文件│ exts.py # 解决循环引用, 存放db│ manage.py # 用flask-script管理│ models.py # ORM│├─.idea│ │ bbs_demo.iml│ │ misc.xml│ │ modules.xml│ │ workspace.xml│ ││ └─inspectionProfiles├─static # 存放静态文件,如图原创 2020-10-29 17:17:02 · 334 阅读 · 1 评论 -
剑指 Offer 15. 二进制中1的个数
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution: def hammingWeight(self, n: int) -原创 2020-09-30 16:34:24 · 89 阅读 · 0 评论 -
剑指 Offer 14. 剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1]。请问 k[0]*k[1]...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof著作权归领扣网络所有。商业转载请联系官方原创 2020-09-26 02:44:20 · 160 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0]到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m = 3,原创 2020-09-14 11:14:02 · 80 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格原创 2020-09-07 18:01:06 · 92 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字 Python
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi原创 2020-07-20 17:57:27 · 140 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题 Python
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21提示:0 <= n <= 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof原创 2020-07-16 18:01:47 · 262 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列 Python
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5提示:0 &l原创 2020-07-15 18:02:16 · 209 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列 Python
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTail”,原创 2020-07-15 17:36:45 · 128 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树 Python
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7限制:0 <= 节点个数 <= 5000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zho原创 2020-07-15 11:47:32 · 214 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表 Python
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2] 输出:[2,3,1]限制:0 <= 链表长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。# Definition for singly-lin原创 2020-07-14 16:35:38 · 200 阅读 · 0 评论 -
剑指 Offer 05. 替换空格 Python
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution: def replaceSp原创 2020-07-14 15:07:03 · 244 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找 Python
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16,22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30] ]给定 target = 5,返回 true。给定 t原创 2020-07-13 17:59:26 · 214 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字 Python
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入: [2, 3, 1, 0, 2, 5, 3]输出:2 或 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof著作权归领扣网络所有。商业转载请联系原创 2020-07-13 10:11:03 · 226 阅读 · 0 评论 -
二叉树 python
百度定义:二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。class Node(object): def __init__(self, item): self.item = item self.left = None self.right = Nonec原创 2020-07-02 16:51:55 · 108 阅读 · 0 评论 -
栈、队列 python
栈栈的操作都只在栈顶,是一种LIFO(后进先出)的数据结构。class Stack(object): def __init__(self, limit=10): self.stack = [] self.limit = limit def push(self, data): if len(self.stack)>=self.limit: raise IndexError("超出栈容量") s原创 2020-06-23 15:18:54 · 112 阅读 · 0 评论 -
访问限制 python
python是动态语言,可以给任何对象绑定属性>>> class Test(object): pass>>> t = Test()>>> t.test = '12312312'>>> t.test'12312312'>>> type(t)<class '__main__.Test'>私有属性 __python没有private等关键字来修饰,凭自觉。>>>原创 2020-06-23 11:36:31 · 99 阅读 · 0 评论 -
Prim算法最小生成树-Python
qwurey的文章写的很好懂了,但是自己代码再写出来确实不一样,主要还是练一下基本功,自己基本功还不够,代码勉强凑合吧,可能过多一阵自己回来再看就能写出更好的。作者的图很好看,用什么画的呢。VISITED = 999999 # 表示已经加入MSTDISCONNECT = 10000 # 表示无通路def Prim(graph: dict, start: str) -> list: lowcost = [DISCONNECT]*len(graph) lowcost[int原创 2020-06-19 17:40:29 · 319 阅读 · 0 评论 -
图的遍历 DFS和BFS
有图像帮助理解的算法都不是很难,如图,从0出发,进行深度优先遍历和广度优先遍历。这个图和我做的题目可能不太符合,只是方便理解,真正输入的是这样的邻接矩阵G = {'0': ['1', '2'], '1': ['2', '3'], '2': ['3', '5'], '3': ['4'], '4': [], '5': []}深度优先遍历类似于树的先序遍历:准备一个集合存放走过的顶点。找出从0出发还没被访问过的邻接的顶点,访问该顶点。重复2,直到原创 2020-06-17 18:00:36 · 170 阅读 · 0 评论