python数据结构
文章平均质量分 53
微若蓝
这个作者很懒,什么都没留下…
展开
-
python leetcoe5
152. 乘积最大子数组 ''' 这个和最大子序和是一样的,只是一个是乘积形式,一个是和的形式 如果想到达i位置,要不经过i-1位置,要不只取i位置 那么就出现了[i]+f(i-1)与i比大小的情况 这里有一个特殊情况: 如果出现了如果f(i-1)=0 那么f(i)=[i] 这里不管[i]是正数还是负数 因为已经有0的记录了,如果后面全是负数,最大值还是可以归到0身上 但是如果为了变成最大而改换成原创 2021-10-26 22:47:22 · 765 阅读 · 0 评论 -
python leetcoe4
53. 最大子序和 ''' 第二次做这个题,我对这个题完全一点印象都没有,所以怎么办呢? 当然是再想一遍白 ''' ''' 思路1: 可以看到,找到具有最大和的连续子数组 --也就是说如果你从右往左找最大的,那么一定是绕不过每一个数的(除非不选) 如:[-2,1,-3,4,-1,2,1,-5,4] 从右往左看: [2,4,3,6,2,3,1,-1,4]原创 2021-10-12 19:21:21 · 124 阅读 · 0 评论 -
2.两数相加
题目链接 题目要求 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 第一想法当然是万金油的暴力,不过这个暴力居然可以成功,第一次的运行超了80%的人吓死我了,后面又运行了几遍,终于是回归正常水平. # Definition for singly-linked list. # class ListNode: # de原创 2021-06-29 11:38:42 · 58 阅读 · 0 评论 -
387. 字符串中的第一个唯一字符
题目描述 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 目标就是找到第一个不重复的字符,那么肯定是需要将字符串全部走一边的,那么根据键统计次数是一个比较好的选择,但又因为是输出索引,所以可以在值中记录两个东西次数和索引 def fun1(s): # 创建字典 dic = {} # 开始对_str进行循环 for i in range(len(s)): a = s[i] if a in dic:原创 2021-06-28 23:00:46 · 60 阅读 · 0 评论 -
python数据结构与算法_二叉树_2021-6-27
前面我们学了线性表的两类: 1.顺序表 2.链表 他们都有各自的特点和好处具体见如下: 那么我们下面要学习一种非线性的数据结构----树 树是图的一种特殊类型,且有着属于自己的独特用途 什么是树? 一种非线性的数据结构,在操作系统,图形学(场景树),数据库系统(索引树),计算机网络(域名树)均有用处.模仿自然界中的树一样,数据结构树也分为:根,枝,叶等三个部分 例子: 比如说生物的物种分类,可以用一种树的形态来表示.而在这个树中,他是一种层次化的分类体系: 分类树的三个特征: 一: 越接近顶层的越普遍 越原创 2021-06-27 23:11:41 · 178 阅读 · 3 评论 -
树题目_2021-06-27
中序遍历是左根右,对任意一个树均如此是一种递归结构 平衡二叉树是二叉查找树为了自身性质的稳定所创建出来的,使用了平衡因子这个变量.平衡因子取值为[-1,0,1] 计算公式: 平衡二叉树又被称为AVL树且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值小于等于1,并且左右两个子树都是一棵平衡二叉树。 假如一个满二叉树(特殊的平衡二叉树)加入一个节点,左右高度差刚好为1,依然属于平衡二叉树。所以题目中的一定会改变其平衡性是错误的。但是有节点的平衡因子是会改变的 哈夫曼树是什么? 这种.原创 2021-06-27 20:17:14 · 59 阅读 · 1 评论 -
链表题目集
这些题目大多是我在牛客网上做的,突然发现自己代码个人认为写的还是挺多的,但是有些许闭门造车,狂妄自大了. 牛客网 有序单链表想要在插入时保持有序,需要进行顺序查找,不能使用二分查找 如果是有序的顺序表是可以采用二分查找的方法,时间复杂度为o(logn) 本题考查负载因子的概念。 散列表的一个重要参数是负载因子a,a=散列表中结点的数目/基本区域能容纳的结点数。 负载因子的大小体现散列表的装满程度。a越大,发生碰撞的可能性越大,一般取a<1。 题目中的散列表结点的数目为7,基本区域能容纳的结点数为19,因原创 2021-06-22 11:22:15 · 314 阅读 · 0 评论 -
数据结构与算法python章节测试_栈_2021-6-21
2单选(2分) 将以下中缀表达式: ( 5 - 3 ) * ( 2 + 4 ) 转换为后缀表达式,结果为? 这个题目一会把代码贴上来,表达式的转换是为了计算的可行性 A.5 3 2 * 4 + - B.5 3 2 * - 4 + C.5 3 - 2 4 + * D.5 3 2 4 + * - 正确答案:C你选对了 4单选(2分) 使用括号匹配算法判断以下表达式: ([()[]{]}<>)结果是否匹配?匹配过程中栈内元素最多有多少个? A.是,3 B.否,4 C.是,4 D.否,3 这是字符串原创 2021-06-21 22:15:21 · 234 阅读 · 1 评论 -
python_图_2021-6-15
图的基本概念 graph:重在由一些基本元素构造而来的图,如点,线段等 图(graph)是比树更为一般的结构,也是由节点和边组成的,树可以说是一种特殊性质的图. 图可以用来表示现实中的很多事物如:道路交通系统,航班路线,互联网连接,大学中课程的先修次序 还有一个跟六度空间一样的玩意,什么任意两个人之间可以通过最多六个人联系起来,这违背了我的尝试,我是不信的,不过说不定哪天我就信了 一些听起来很专业的术语表 顶点是图的基本组成部分 而边分为有向边和无向边,相应的图被称为有向图和无向图 这个东西就是为了原创 2021-06-15 22:50:08 · 165 阅读 · 2 评论 -
python_查找排序算法汇总_2021.6.8
引言 首先是排序算法,总的来说也挺多的如冒泡,选择,快速排序等等.但有的只是说锻炼一下你的写代码能力,在实际的应用中用他就是傻B,而快速排序是很快的一种排序方法,平均时间复杂度可以达到o(nlogn)还是很不错的.最快的应该是二叉排序树的中序遍历,但需要去转化成某一种数据结构,涉及到转化时还是挺烦人的,堆排序也不错,就一直出堆就行了 冒泡排序 两个循环嵌套的写法 import random import time sta=time.time() #定义冒泡排序函数 def maopao(_list原创 2021-06-08 11:41:31 · 83 阅读 · 0 评论 -
python_循环队列_2021.6.5
front 指针指向队头元素, rear 指针指向队尾元素的下一个位置 当front=rear时该循环队列可能为空,也可能为满原创 2021-06-05 13:13:03 · 105 阅读 · 0 评论 -
python_LeetCode题目集__二叉树的前序遍历(非递归写法)2021-6-1
本篇文章主要写的是二叉树的前序遍历的非递归代码 无论是递归还是非递归都需要记录自己走过的路,所以需要栈来进行记录 个人认为非递归代码的几个关键点 1.什么时候是循环结束的条件? 当当前节点和栈都为空时循环就结束了 2.对于任意一个子树,一定先努力的往左边走,走不通的时候,回到他的右边,继续努力往左走 # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val #原创 2021-06-01 10:35:20 · 101 阅读 · 0 评论 -
python_LeetCode题目集__二叉树的最大深度2021-05-28
二叉树的最大深度 哈哈哈,回想第一次做这个题的时候被支配的恐惧了,是我过于愚蠢了. 1.递归写法 忆往昔峥嵘岁月,死磕这个题两个多小时,还是有一些情况没有考虑到,为什么呢? 因为我用栈模仿递归,结果很多边界条件没想到,就一种报错.无奈之下去看了答案,好家伙,我在干什么!!! 下面是递归代码的写法 class Solution: def maxDepth(self, root: TreeNode) -> int: #基本结束条件 if root:原创 2021-05-28 19:27:29 · 54 阅读 · 0 评论 -
python_LeetCode题目集__有效的括号2021-05-27
有效的括号 兄弟们,有效的括号这一题个人认为主要是理清楚可能出现的错误情况 首先假设只有一种括号 ( ) 这样可能出现的情况有如下: 1.左括号多了 2.右括号多了 首先我采取的是栈的方法,通过循环将单个的括号拿出来,遇见左括号入栈,遇见右括号进行比较. 这样如果在循环中遇见右括号进行比较,如果栈为空说明右括号多了,如果不为空就直接删除就行 当循环结束,即所以括号被遍历完,再次对栈进行一个判断.若为空,就是说左括号,和右括号的数量刚刚好,括号就为有效括号.栈不为空则左括号多了. 代码我懒得写了 现在假原创 2021-05-28 09:00:27 · 69 阅读 · 0 评论 -
python_LeetCode题目集__合并两个有序链表2021-05-27
最近在研究一些算法为蓝桥杯和毕业时的面试做准备,以及增加自己在数据结构方面的理解 合并两个有序链表 首先是创建一个链表类 class ListNode(): def __init__(self,val,next=None): self.val=val self.next=next 1.非递归的写法 将两个链表的头部进行比较从小到大相连 #非递归写法 def fun(l1,l2): # 将p1,p2的第一个元素进行比较 # 循环结束的条件是,p1或p2原创 2021-05-27 20:57:27 · 187 阅读 · 0 评论 -
python数据结构算法 堆列表实现
本文章是在学习二叉树并且了解了什么是堆和二叉查找树之后所写. 什么是堆? 堆是一种有着自身独特性质的二叉树. 第一:除了倒数第二层子节点可以不满外,其他层必有两个子节点(叶节点在最后一层,是没有子节点的). 第二:叶节点是从左往右排列 第三:(若为小顶堆,根节点最小)该节点的值一定小于其子节点的值,而兄弟节点之间没有大小关系 在这里插入代码片 ...原创 2021-05-26 12:32:23 · 206 阅读 · 0 评论 -
python数据结构与算法如何实现head和tail的增加和删除操作均为o(1)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言主体 前言 最近在学习python的数据结构与算法中的线性表,因为其是链式存储每一次对于末尾的炒作均为o(n)于是乎在网上搜了些资料了解到可以对尾节点进行储存 主体 对于head而言增加和删除的操作均为o(1)只需要对头结点进行保存 class UnorderedList(): def __init__(self,item): self.item=item self.next=None原创 2021-04-03 16:33:10 · 245 阅读 · 1 评论