
python数据结构
python数据结构,不刷不行
漫漫行程路
一天又一天,不过是过眼云烟;一年又一年,不过是昙花一现;留给我们的唯有似昨日的回忆与不经意的微笑。
展开
-
python实现数据结构4.链表
python实现数据结构4.链表原创 2022-07-10 16:03:36 · 188 阅读 · 0 评论 -
python实现数据结构3.详解桶排序以及排序内容大总结
python实现数据结构原创 2022-07-05 22:50:59 · 485 阅读 · 0 评论 -
python实现数据结构 2.认识O(NlogN)的排序
python实现数据结构原创 2022-07-05 21:58:22 · 283 阅读 · 0 评论 -
python实现数据结构1.认识复杂度和简单排序算法
python实现数据结构原创 2022-07-05 17:37:51 · 553 阅读 · 0 评论 -
python动态规划-爬楼梯
动态规划原创 2022-06-20 00:01:27 · 310 阅读 · 0 评论 -
python动态规划-斐波那契数
动态规划原创 2022-06-19 23:53:11 · 434 阅读 · 0 评论 -
动态规划学习
学原创 2022-06-15 06:07:39 · 112 阅读 · 0 评论 -
001复杂度和简单排序算法
声明此专栏是我学习得B站左程云得公开课得课程笔记,诸位想去看的直接去B站搜他即可。看了很多人得算法课,感觉还是他更胜一筹,现在正好有时间开始慢慢看了,准备把他这个系列看完,让我可以更加清晰地解决生活和工作中遇到地问题。为什么声明放在这么前,就是因为重视。复杂度和简单排序算法时间复杂度常数操作跟数据量无关,比如+,-,*,/,位运算,固定时间地东西数组跟数据量无关和数据量有关得就不是常数操作,链表跟数据量有关时间复杂度:常数操作过程中,只要高阶项,忽略掉高阶项得系数选择排序时间复杂度O(N原创 2022-04-25 11:29:04 · 102 阅读 · 0 评论 -
python迭代器和生成器
迭代器迭代器不能后退,提供了一种惰性数据方式list可以先取1在取0,但是迭代器不可以可迭代对象必须实现__iter__(),但是迭代器必须实现__iter__()和__next()__可迭代对象调用iter(可迭代对象)返回一个迭代器生成器方法里有yield这个关键字,就是生成器韩式python解释器会编译字节码,如果发现有yield,就会标记该函数,然后在调用地时候会返回一个生成器对象生成器可以在任何时候,任何函数中恢复运行,因为他的栈帧并不在真正地栈中,而是在堆中生成器其实也是一个迭原创 2022-02-22 09:19:45 · 259 阅读 · 0 评论 -
python数据结构剑指offer-重建二叉树
例题描述给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,5,3,6,7}和中序遍历序列{4,2,5,1,6,3,7},则重建出如下图所示。解决思路因为先序遍历根中序遍历是保存在数组中的,所以我们需要利用数组的性质,而不是上来就利用二叉树的性质,刚开始我是按照二叉树来做的,直到我失败了无数次之后,看到了函数的传入值是两个list,我好像参悟了什么,又好像没参悟透,然后我就看大佬的代码,看了好多次,手动运行了好多次,始终一知半原创 2022-02-19 15:27:13 · 2904 阅读 · 0 评论 -
python数据结构二叉树的前序,中序,后续遍历与推导
根据先序中序求后续其余同理,多画图就理解了原创 2022-02-16 20:11:43 · 450 阅读 · 0 评论 -
python数据结构剑指offer-链表中倒数最后k个结点
例题描述输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。数据范围:0 \leq n \leq 10^50≤n≤105,0 \leq a_i \leq 10^90≤ai≤109,0 \leq k \leq 10^90≤k≤109要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如输入{1,2,3,4,5},2时原创 2022-02-16 01:03:45 · 456 阅读 · 0 评论 -
python数据结构剑指offer-链表中环的入口结点
例题描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: n\le10000n≤10000,1<=结点值<=100001<=结点值<=10000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:解决方案 def EntryNodeOfLoop(self, pHead): # write code here l原创 2022-02-16 00:48:23 · 479 阅读 · 0 评论 -
python数据结构剑指offer-两个链表的第一个公共结点
例题描述输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: n \le 1000n≤1000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。输入描述:输入分为是3段,第一段是第一个链表的非公共部分原创 2022-02-16 00:16:15 · 229 阅读 · 0 评论 -
python数据结构-图
图图是一种数据间具有多对多关系的非线性数据结构顶点的度:指与该顶点关联的边的数目全部顶点的度之和为边数的两倍图的存储有邻接矩阵,邻接表,十字链表邻接矩阵边采用顺序存储结构,用二维数组存储邻接表采用链式存储结构,存储行的后继,即矩阵行的单链表十字链表图的邻接多重表:采用链式存储结构,存放行和列的后继图的广度优先算法从某一个顶点开始,一次性访问他的邻接点,直到访问结束利用栈实现从源节点开始把节点按照深度放入栈,然后弹出每弹出一个点,把该节点下一个没有进过栈的邻接点放入栈直到栈变原创 2022-02-14 22:18:17 · 693 阅读 · 0 评论 -
python数据结构-树
树树是数据元素之间具有层次关系的非线性结构,由n个节点构成的有限集合,节点数为0的树叫空树树:有且仅有一个被称为根的节点其余节点可分为m个互不相交的有限集合,每个集合又构成一棵树,叫做根节点的子树树中的元素具有一对多的逻辑关系除根节点以外,每个数据元素可以有多个后继但有且仅有一个前驱树是递归定义的节点的路径:根节点到该节点所经过节点的顺序排序路径的长度:路径的长度指的是路径中包含的分支数节点的度:节点的度指的是节点拥有的子树的数目树的度:树的度指的是树中所有节点的度的最大值叶节点原创 2022-02-14 20:32:28 · 9403 阅读 · 0 评论 -
python数据结构-串
串字符串也叫串,是由字符组成的有限序列,是一种常用的非数值数据串的逻辑结构是线性表,其每个数据元素都是一个字符串主要是对子串进行操作通常采用顺序存储结构存储为什么不用链式呢?字符串都是一段序列,直接存一快方便一点,而且一般串都比较短字符串中任意个连续字符组成的子序列称为字符串的子串空串是任意串的子串每个字符串都是其自身的字串两个串相等是指串长度相同并且对应位置上的字符也相同两个串的大小由对应位置上的首个不同字符的大小决定,字符比较顺序是从头开始依次向后当两个串的长度不等而对应位置上的字原创 2022-02-14 11:33:07 · 1234 阅读 · 2 评论 -
python数据结构剑指offer-构建乘积数组
例题描述给定一个数组 A[0,1,…,n-1] ,请构建一个数组 B[0,1,…,n-1] ,其中 B 的元素 B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1](除 A[i] 以外的全部元素的的乘积)。程序中不能使用除法。(注意:规定 B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2])对于 A 长度为 1 的情况,B 无意义,故而无法构建,用例中不包括这种情况。数据范围:1 \le n \le 1原创 2022-02-13 20:13:54 · 180 阅读 · 0 评论 -
python数据结构剑指offer-合并两个排序的链表
合并两个排序的链表描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。数据范围: 0 \le n \le 10000≤n≤1000,-1000 \le 节点值 \le 1000−1000≤节点值≤1000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6}解决方案合并两个排序的链表,首先这个链表是递增的,那么意味着越到原创 2022-02-13 17:50:09 · 314 阅读 · 0 评论 -
python数据结构剑指offer-反转链表
反转链表描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0\leq n\leq10000≤n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。示例1输入:{1,2,3}返回值:{3,2,1}示例2输入:{}返回值:{}说明:空链表则输出空解决方案反转链原创 2022-02-13 16:05:09 · 189 阅读 · 0 评论 -
python数据结构-队列(queue)
队列插入操作只能在尾部进行,删除操作只能在表头进行队列先进先出顺序队列顺序队列的多次入队和出队操作会造成有存储空间却不能进行入队操作的‘假溢出’顺序队列的存储单元没有重复使用机制解决方案:将顺序队列的首尾相连,形成循环顺序队列循环顺序队列需要少利用一个存储单元class SqQueue: def __init__(self,maxSize): self.maxSize = maxSize # 队列最大存储个数 self.queueElem = [Non原创 2022-02-13 14:24:43 · 1067 阅读 · 0 评论 -
python数据结构剑指offer-二叉树的深度
例题描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。数据范围:节点的数量满足 0 \le n \le 1000≤n≤100 ,节点上的值满足 0 \le val \le 1000≤val≤100进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)假如输入的用例为{1,2,3,4,5,#,6,#,#,7}返回值:4示例2输入:{}返回值:0解决方案方案一:递归实现c原创 2022-02-10 22:19:45 · 714 阅读 · 0 评论 -
python数据结构-栈(stack)
栈栈是一种特殊的线性表,其插入删除操作只能在表的尾部进行在栈中允许进行插入删除的操作的一端为栈顶,另一端为栈底栈的插入叫做入栈,栈的删除叫做出栈栈是先进后出,类似往箱子里放衣服,先放进来的衣服,最后才能拿出去,因为他在最底下顺序栈:基于顺序存储的实现链式栈:基于链式存储的实现入栈和出栈都在栈顶进行,所以不存在栈的任意位置插入和删除的操作,所以不需要设置头节点,只需要将指针top指向栈顶元素节点,每个节点的指针域指向其后继节点# 定义节点class StackNode(object): #原创 2022-02-06 10:29:35 · 2967 阅读 · 1 评论 -
python数据结构剑指offer-从尾到头打印链表
例题描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000示例1输入:{1,2,3}复制返回值:[3,2,1]复制示例2输入:{67,0,24,58}复制返回值:[58,24,0,67]复制解决方案方案一:用单链表解决 def printListFromTailToHead(self , listNode: ListNode)原创 2022-02-05 22:17:45 · 805 阅读 · 0 评论 -
python数据结构-链表
单链表单链表的节点只有值跟指向下一个节点的指针# 定义节点class ListNode(object): def __init__(self, x): # 数据域:存储数据元素 self.val = x # 指针域:存储下一节点的指针 self.next = None每个单链表有一个头节点,空链表除外,尾节点指向None值# 定义单链表class SingleLinkList(object): # 定义头节点,空原创 2022-02-05 21:48:32 · 813 阅读 · 0 评论 -
python数据结构剑指offer-替换空格
例题描述请实现一个函数,将一个字符串s中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。数据范围:0 \le len(s) \le 1000 \0≤len(s)≤1000 。保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种。进阶:时间复杂度 O(n)\O(n) ,空间复杂度 O(n) \O(n)示例1输入:“We Are Happy”复制返回值:“We%20Are%20Happy”复制示例原创 2022-02-05 12:00:00 · 399 阅读 · 0 评论 -
python数据结构剑指offer-二维数组中的查找
例题描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。数据范围:矩阵的长宽满足 0 \le n,m \le 5000≤n,m≤500 , 矩阵中的值满足原创 2022-02-05 11:41:23 · 252 阅读 · 0 评论