【剑指offer】栈和队列
栈Stack定义Definition
栈: 只允在一端进行插入或删除操作的线性表。
特点: 后进先出
队列Queue定义Definition
队列是一种先进先出的线性表。
它只允许在表的一端进行插入,而在另一端删除元素。在队列中允许插入的一端叫做队尾,允许删除的一端则称为队头。
特点: 先进先出
剑指offer题目
用两个栈实现一个队列。
队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例1:
1234输入:["CQueue","appendTail","deleteHead","deleteHead","deleteHead"][[],[3],[],[],[]]输出:[null,null,3,-1,-1]
示例2:
1234输入:["CQueue","deleteHead",&quo ...
【Python查漏补缺(六)】JSON文件操作
首先认识一下JSON格式:(两种格式)
数组/集合格式: 类似于Python中列表套字典[{}, {}, {}]
[obj,obj,obj…]
对象格式: 类似于Python中的字典{}格式
{“key1”:obj,”key2”:obj,”key3”:obj…}
s
四个函数实现JSON和Python之间的交互
※json.load 从json文件中加载数据(自动加载为python类型的数据※json.dump 将python中的数据写入到json文件中 json.loads 把字符串类型的json数据转换为字典 json.dumps 把字符串类型的数据存储到json文件中
json.load对Json文件进行读取
12345import jsonwith open("stu.json", "r", encoding="utf8") as f: data = json.load(f) print(data) print(type(data))
j ...
【数据结构】顺序表和链表
今天偶然间发现了之前考研电脑的文档, 我想看一看吧,一看我人都傻了,欺负我这个半年没学习数据结构的考研er,这好吗,这不好.于是就想把之前的东西给整理下,以后方便复习.
线性表Linear List
线性表(linear list)是n个具有相同特性的数据元素的有限序列。
线性表是一种在实际中广泛使用的数据结构,
常见的线性表:顺序表、链表、栈、队列、字符串...
顺序表Contiguous List定义
线性表的顺序存储称为顺序表,用一组地址连续的存储单元依次存储线性表中的数据元素。
即顺序表的两元素不仅逻辑相邻,物理位置也相邻。逻辑顺序与物理顺序相同
在大学学习的过程中使用最多的就是c语言中的数组了吧!
特点
支持随机访问 (即通过元素序号和首地址下标在O(1)时间复杂度内找到该元素)
存储密度高 (即每个节点都存储数据元素)
插入和删除需要移动大量元素 (因为顺序表逻辑上相邻的元素物理上也相邻,修改一个元素则需要变更很多)
顺序表考查角度
解题一般使用暴力解法
枚举法
枚举法是最容易想到的方法,把所有可能的情况都考虑到,然后从中选出符合题目要求的情况,通常使用fo ...
【数据结构】时间和空间复杂度
纯纯的复习, 主打的就是一手温故知新.
定义
时间复杂度是对时间增长速度的一个估计
可以简单的用极限理解,若所有指令总执行次数T,时间复杂度为O(f(n))的算法表示 = K(K为常数)。
例如T1=n2+n,T2=2n2-n,通过极限的思想得到这两个算法的f(n)=n即时间复杂度都是O(n)
因为log2n=log23*log3n,而log23是常数,所以O(log2n)=O(log3n),考虑复杂度时,所有的log都尽量写成log2n或者logn的形式。
举3个栗子搞定时间复杂度Demo1(每一层的变量都是自增1)12345for (i=0;i<n;i++) for (j=0;j<n;j++) for (k=0;k<n;k++) if (A[i][j]>A[i][k]+A[k][j]) A[i][j]>A[i][k]+A[k][j];
上面代码的每一层都是变量自增,且变量都是从0~n-1共n次 ...
Python基础(全)
碎碎念:发现越到后面越显得基础的重要了,比如说有时候发现跟同学问的列表有关的操作,定义列表list1 =list[]删除元素list1.del()和list.remove()的区别竟然都不知道了。del是按照数组元素下标巧记l下标进行删除,remove是根据元素的值进行删除,真的是基础不牢地动山摇啊!最后再补充一些使用的Python的函数使用方法和小技巧吧。
Python中的输入和输出(※)第一种输出方式:
1234name = "老李"age = 18height = 18.2print("我的名字是:%s,年龄是:%d,身高是:%.3f" % (name , age , height))
第二种输出方式:
1print(f'名字是{name},年龄是{age},性别是{gender}')
输入方式:
1234price = float(input("请输入苹果单价:"))weight = float(input("请输入购买的 ...
【Python查漏补缺(五)】学生管理系统(双版本)
开始之前首先讲一下遇到最大的两个坑.
在系统初始化之前,先从MySQL数据库中拉取数据,这里使用cursor.fetchall读取到所有的数据是元组套元组的形式.然后我用for遍历,在for循环外面定义了个字典,将遍历到的每个元组转换为字典的value值.然后坑爹的来了,由于字典我放在了for循环外面定义, 导致字典只有一个地址,每次读取到数据存入字典中,然后append到list,始终是元组的最后一组值.
1234567891011121314stu_dict = {} # 这里字典位置应该放到for循环里面的嗷data = cursor.fetchall() # 将从数据库中获取的数据写入到列表中 for i in data: # 这个字典,我开始放在了for循环上面,但实际上是错误的 """ 局部变量和全局变量的区别,for循环中定义,定义三次,每次的地址都不一样 如果放在外边,只有一个地址,内容发生变化,之前存储的内容也会变(尝试解释一通 &q ...
【Java查漏补缺(二)】面向对象
Retrospection
Java中方法的定义:
1234修饰符 (public static) 返回值的数据类型 (void/int/boolean...) 方法名(数据类型 参数名1, 数据类型 参数名2) { 方法体; return 具体的返回值;(如果返回值是void类型可以不写)}
其中修饰符,可以简单的理解为: public static(后续会说的)
具体案例:
1234public static int getSum(int a, int b){ int sum = a + b; return sum;}
方法重载OverLoaded
简单理解方法重载: 就是在同一个类中, 出现方法名称相同, 但是参数列表不同(参数个数, 参数的数据类型不同)两个或两个或者多个方法
1234567891011121314151617181920212223242526272829303132/*方法重载: 在同一个类中, 出现方法名称相同, 但是参数列表不同的(个数不同,对应的数据类型不同)的两个或多个方 ...
【Python查漏补缺(四)】面向对象(全)
何为面向对象: 就是一种编程思维.
面向对象(ObjectOriented)的三个基本特征是: 封装(Encapsulation),继承(Inheritance)和多态(Polymorphism)
Retrospection
类: 类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物.
定义方式是class 类名(Object)
特征即是属性
行为即是方法
对象: 对象是类创建出来的真实存在的事物,对象又名实例, 创建对象的过程也叫实例化对象。
创建对象的方式: 对象名 = 类名()
Q:为什么定义(父)类需要在括号中写Object
A: 因为Python中,所有类默认继承object类(顶级类或者基类),其他子类叫做派生类
Q:定义类中的方法比如: def wash(self)其中的self是什么意思呢?
A: self指的是调用该函数的对象
Tips
三个重要的知识点
定义类中的方法的时候,方法名后的括号中要加self
print(对象名)这句话的意思就是打印对象的内存地址
对象名.方法名()这就是调用函数中的方法
Demo1 ...
【Python查漏补缺(三)】面向对象
程序员是要讲求生产力的,一天的练习,晚上再回顾一下.
类和对象*12345678910111213# 定义类class Washer(): # 定义方法 def wash(self): print("我会洗衣服") print(self) # 相当于直接打印函数的地址# 创建对象haier1 = Washer()# 打印函数在内存中的地址print(haier1)# 调用函数中的方法haier1.wash()
添加和获取对象的属性123456789101112# 定义类class Washer(): # 定义方法 def print_info(self): print(f"洗衣机的宽度是{self.width}") print(f"洗衣机的高度是{self.height}")# 创建对象haier = Washer()haier.height=100haier.width = 50haier.prin ...
【数仓从1到n】在线教育项目总结
step1: 需求分析(知道有哪些主题,哪些指标,哪些维度step2: 建模分析(是否要压缩,行/列存储,索引,分区,分桶step3: 建模操作,建库建表step4: 数据采集(MySQL业务数据库 -> Hive(ODS层 如何验真: 总量校验,条件校验,抽样校验step5: 数据清洗转换(空值过滤,空值转换,列值裁剪,切割step6: 数据分析操作,结合主题,维度指标完成各种需求step7: 数据导出操作,导出分析后的结果数据到mysql中,之后对接FineBI进行可视化展示
需求分析
需求一: 计期内,新增意向客户(包含自己录入的意向客户)总数。
12345678910111213指标: 意向客户数维度: 时间维度: 年 月 天 小时 新老维度: 线上线下:涉及到表: customer_relationship (意向表)涉及到字段: 时间维度: create_date_time 注意: 此处有转换操作 需要将 create_date_time 转换 yearinfo monthinfo dayinfo 指标字段: ...
