自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(133)
  • 收藏
  • 关注

原创 bisect模块

bisect模块提供的函数有:bisect.bisect_left(a,x, lo=0, hi=len(a)) :查找在有序列表 a 中插入 x 的index。lo 和 hi 用于指定列表的区间,默认是使用整个列表。如果 x 已经存在,在其左边插入。返回值为 index。bisect.bisect_right(a,x, lo=0, hi=len(a))bisect.bisect(a, x,lo=0, hi=len(a)) :这2个函数和 bisect_left 类似,但如果 x 已经存在,在其右边插入。

2022-07-14 11:57:10 416 2

原创 贝叶斯定律

先复习一些概率理论。联合概率:事件 A 和事件 B 同时发生的概率;也叫做乘积法则。P(A,B)=P(A∩B)=P(A∣B)P(B)=P(B∣A)P(A)P(A,B) = P(A \cap B) = P(A|B)P(B) = P(B|A)P(A)P(A,B)=P(A∩B)=P(A∣B)P(B)=P(B∣A)P(A)求和规则:事件 A 和 事件 B不同时发生的概率。P(A∪B)=P(A)+P(B)−P(A∩B)P(A \cup B) = P(A) + P(B)-P(A\cap B)P(A∪B)=P(A)+P(

2022-07-07 00:22:52 651

原创 二维数组相关题目 力扣 Python

解题思路:解法 1. 主对角线反转加竖直反转。解法 2. 水平反转加主对角线反转。73. 矩阵置零解题思路:题目要求常量空间且原地解决。利用矩阵的第一行和第一列来标记有 0 的行与列。498. 对角线遍历解题思路:118. 杨辉三角解题思路:模拟边界两边各为 1第 i 行的元素 j 为第 i - 1 行的元素 j - 1 和 j 的和119. 杨辉三角 II解题思路:与 118 逻辑相同还是模拟,不同的是输出给定的索引行。使用一个数组,进行两重循环遍历。先遍历 k 行,再对每一行

2022-07-06 16:05:46 1021

原创 Python is 和 =

Python 中 is, is not, ==, !=如果判断是否为 None, 一般使用 is 或 not is如果比较值,一般使用 == 或 !=

2022-07-02 14:20:28 257

原创 二叉树 BFS 力扣 Python

解题思路:层序遍历的顺序为从上到下,从左到右依次遍历。从上到下是通过访问根节点的左右子树遍历。从左到右是记录每一层的节点个数,以下代码的 level 就是这个作用,这里使用了双端队列是为了推广性,如下题 103, z 形循环记录每层的结点,用列表也是可以的。103. 二叉树的锯齿形层序遍历解题思路:定义一个 flag作为记录,奇数正向,偶数逆向。双端队列可以很方便的前后增加元素。107. 二叉树的层序遍历 II解题思路:如题 102,这道题只颠倒每层记录的节点顺序就可以。注意一点,相信很多人想

2022-07-01 23:34:47 273

原创 222. 完全二叉树的节点个数 (Python)

解题思路:根据题意,完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。所以一棵树的左子树或右子树为完全二叉树,那么部分子树可以使用公式的方式直接计算出,这将节省通过逐层递归来计算节点的个数。所以当一个节点的左子树和右子树高度相同时,那么这棵树为完全二叉树。对于完全二叉树的左右子树,其有一半肯定是完全的。所以完全的部分使用公式计算。综合来讲,递归深度为树的高度是 log N,每次递归所花费的时间就是 while 循

2022-07-01 19:16:32 301

原创 二叉树与二叉搜索树的公共祖先 力扣 (Python)

解题思路:判断二叉树的公共祖先由以下三种情况组成。235. 二叉搜索树的最近公共祖先解题思路:当考虑二叉搜索树的公共祖先时,要结合二叉搜索树的性质。以上的两题均可以用以下方式解决。二叉搜索树其实是特殊的二叉树。而对于二叉树的最小公共祖先来说,以下代码包含了问题一的三种判断情况。...

2022-07-01 18:56:49 244

原创 二叉搜索树相关题目总结(二) 力扣 Python

前文 二叉搜索树相关题目总结(一) 中,主要是涉及二叉搜索树中的一些操作。这篇文章是列举两道与构造 BST 有关的题目。解题思路:给定一个 n, 问从 1 到 n 能组成互不相同的 BST 有几种?简单来看,就是穷举所有可能的树,然后算一下结果。第一种方法,递归 DFS, 也是回溯的一种体现。加入了名为 cache 的数组,也就是 dp 数组用于消除子问题重叠。解法二:其实和解法一一致,只不过引入了 lru_cache 包,可以理解为一个隐式 cache 装饰器,用于自动缓存子问题。代码相对于简洁。解法

2022-06-30 22:53:15 137

原创 二叉搜索树相关题目总结(一) 力扣 Python

总结一下与二叉搜索树有关的题目,解决思路都是二叉搜索树的相关操作。解题思路:验证一颗树是不是二叉搜索树(BST)?依据二叉搜索树的性质写出代码,如下注释。700. 二叉搜索树中的搜索解题思路:利用 BST 的特性,进行搜索。如果当前节点小于目标值就去右子树查找。如果当前节点大于目标值就去左子树查找。701. 二叉搜索树中的插入操作解题思路:在二叉搜索树查找的基础上,修改相关代码变差插入。450. 删除二叉搜索树中的节点解题思路:BST 的删除要比前面的三道题复杂一些。主要是被删除的节点在树中

2022-06-30 22:32:36 207

原创 合适的工作就是好工作

" 找到一份好工作,此后一生不再劳作。 —— 杰克 韦尔奇"1.你的第一份工作是什么?可能与自己的专业相关,也可能相差很大。可能你做的很好,也可能你并不擅长。无论你做的怎样都没有关系,重要的一点是,你在未来会从事什么样的工作?而事实是,这个问题几乎不可能准确预测。那么你怎么找到合适的工作?首先,找到合适工作需要时间,尝试和耐心。需要时间来试错,这个过程需要忍耐。毕竟,你只有在某个地方工作一段时间后,才知道自己是否能做好,是否感觉合适。当然越早开始试错,「时间成本」越低。做一件事情的成本,是你放弃的事情里面

2022-06-30 22:17:05 141

原创 python float(‘inf‘) 和 float(‘-inf‘)

常用作比较。例如,在遍历树时计算路径路由的开销。在选项列表中找到“开销最低”的路径:如果你没有 float(‘Inf’) 可用,你会使用什么值作为初始lowest_path_cost?当然随机设定一些值也是可以的,float(‘Inf’) 消除了这种不确定性。相反 float(‘-Inf’) 也是一样的这里不在举例。...

2022-06-30 13:06:18 854

原创 什么是产品思维

产品思维,可以理解为「把自己产品化」,关键点在于一个是「自己」,另一个是「产品化」。「自己」​具有独特性,你应该有点 “ 东西 ”,每个人都应该有,专长或者技能,简单来说,​你擅长做什么?写文章,录视频,做博客,写代码,… …这些事情有一个共同的底层逻辑,你真的喜欢做,因为喜欢做,就能够做好,能做好就能坚持下去,能坚持下去就能超越很多人了,这时你把自己 “分享出去”,你分享的内容是有价值的,因为其他人在这方面不如你。这就是你的「产品」。​别人没有。找个自己的「产品」并不容易,通常需

2022-06-30 00:20:20 462

原创 深度学习的历史

概念层面上来讲,深度学习是受到大脑的启发。就像飞机的设计灵感来自鸟类。虽然它们的基本原理一致,但细节却大相径庭。深度学习的历史可以追溯到现在更名为「控制论」(cybernetics)的领域。它始于 1940 年代的 McCulloch 和 Pitts,他们提出了神经元是具有开启和关闭状态的阈值单元,可以通过构建逻辑推理并将神经元相互连接来构建布尔电路。大脑基本上是一个逻辑推理机,因为神经元的开启和关闭状态是二元的。神经元计算输入的加权总和,并将该总和与其阈值进行比较。如果它高于阈值则打开,如果低于阈值则

2022-06-30 00:17:39 293

原创 深度学习的历史

概念层面上来讲,深度学习是受到大脑的启发。就像飞机的设计灵感来自鸟类。虽然它们的基本原理一致,但细节却大相径庭。深度学习的历史可以追溯到现在更名为「控制论」(cybernetics)的领域。它始于 1940 年代的 McCulloch 和 Pitts,他们提出了神经元是具有开启和关闭状态的阈值单元,可以通过构建逻辑推理并将神经元相互连接来构建布尔电路。大脑基本上是一个逻辑推理机,因为神经元的开启和关闭状态是二元的。神经元计算输入的加权总和,并将该总和与其阈值进行比较。如果它高于阈值则打开,如果低于阈值则

2022-06-29 16:57:22 1194

原创 二叉搜索树 230. 二叉搜索树中第K小的元素 1038. 从二叉搜索树到更大和树

解题思路:1038. 从二叉搜索树到更大和树解题思路:

2022-06-29 15:40:37 123

原创 Python 中 list 和 deque 性能对比

list 与 deque 的性能对比如下,deque 比 list 快了将近一倍。deque 的 appendleft() 和 popleft() 的时间复杂度为 O(1)list 的 insert(0, value) 和 pop() 的时间复杂度为 O(n)列表追加性能好坏不定,因为它使用了realloc()。因此,往往在简单代码中列表的性能不算太差(因为 realloc 内存分配机制不需要移动数据),而在实际应用代码中计时非常慢(因为 realloc 机制会移动所有数据)。相比之下,deque

2022-06-29 11:08:53 849

原创 二叉树的序列化 力扣 297. 二叉树的序列化与反序列化 652. 寻找重复的子树

解题思路:利用前文所说,分解的思路。序列化: 后序遍历拼接字符串。反序列化:由于要分割字符串的逗号,额外采用一个 helper 函数来递归地分解并拼接成树。

2022-06-29 10:48:40 1620 2

原创 力扣树的进一步应用

解题思路:105. 从前序与中序遍历序列构造二叉树解题思路:106. 从中序与后序遍历序列构造二叉树解题思路:889. 根据前序和后序遍历构造二叉树解题思路:

2022-06-28 16:45:42 1618

原创 设计模式工厂模式(Factory Method)— Python

工厂方法是设计模式中,创建设计模式的一种设计方式。它允许接口或类创建对象,但让子类决定要实例化哪个类或对象。工厂方法提供了一种更好的方式,创建对象(不需要更改客户端的代码逻辑)。看一个语言翻译模型创建类的例子。看一下不使用工厂模式的代码:使用工厂模式的代码:如果想要添加更多的语言版本模块,只需要添加对应的类。然后在工厂模式中添加对应类的字典索引,即可完成,这个过程不需要改变客户端的代码。优点:...

2022-06-28 14:06:14 195

原创 二叉树类题目 力扣

226. 翻转二叉树116. 填充每个节点的下一个右侧节点指针114. 二叉树展开为链表

2022-06-27 23:21:23 126

原创 机器学习系统在生产中的挑战

机器学习和深度学习在过去的几年迅速火热起来,但网上的一些资料和课堂中的教学大部分都是以构建模型和调节模型为主。然而在实际的生产中,机器学习工程师的职责不仅仅是构建模型和维护模型,更需要掌握一些软件工程的技能。大多数的公司在过去的几年中才开始使用机器学习技术,或者开发相关系统。而在规模化开发和运行机器学习系统的公司更是不多。而在运行系统中,常常会遇到一些挑战,这篇文章是想深入讨论一下运行机器学习系统的几个挑战。机器学习的开发是一个迭代过程。需要对数据、学习算法和模型参数的多种组合进行试验,并跟踪这些变化对预测

2022-06-26 21:12:48 334

原创 树的概念及其应用(Python)

树是一种由节点(node)和边(edges)构成层级关系的结构。如果你了解 linux 文件结构(tree 命令),它的结构也是一棵树。我们快速看下树涉及到的一些概念:二叉树是树结构里面最常用的一种树结构,其实二叉树就是一种简单的树。二叉树的每个节点最多包含两个孩子。从上边的图来看几个二叉树的概念:一棵 size 为 n 的二叉树高度最多可以是 n,最小的高度是 ⌊lgn⌋+1,这里 log 以 2 为底简写为 lgn。一棵二叉树的前序遍历结果 = 根节点 + 左子树的前序遍历结果 + 右子树的前序遍历结果

2022-06-24 14:58:34 1023

原创 机器学习岗位面试中的数据结构和算法

数据结构和算法几乎是程序员面试中都要考察的部分。重要程度不需要我多少,这些也是非常值得花时间去学习的。这篇文章不仅能给你提供一些学习数据结构和算法的思路,还能给你在面试机器学习岗位时提供一些建议。如果你对数据结构和算法并不了解,可以通过网上的视频和书籍来进行学习,大多都是免费的。最好的教材和内容往往也都是免费的!想要系统的学习数据结构和算法,我推荐《算法4》和《算法导论》,这两本书能帮助你系统的学习数据结构与算法。《算法4》是一本非常实用的算法书籍,里面的问题大多都是工作中的实际问题,非常偏应用。《算法4》

2022-06-23 22:25:55 612

原创 机器学习工作岗位

以下列举了一些常见的机器学习岗位,这些岗位的需求是变动的。需求的变化基于不同公司的具体需求。

2022-06-23 11:23:45 2059

原创 学习编程只需要这三条建议!

在学习编程的过程中,有一个常见的误区:很多人不会重视基础知识,常见的现象是这一章的内容还没有理解,就跳到了另外一章。人总是倾向于自己骗自己!想要进一步提升自己的代码编写能力, 你必须非常了解对应的基础知识并灵活运行。像变量,控制语句,类的用法,数据结构,第三方工具的库和包,这些内容不一定要背下来,需要的时候可以再查。重要的是理解它们的用法。另一个常见错误是,初学者想直接通过看书和看视频的方式学会编程。了解知识和运用知识的区别还是很大的。最重要的是练习,每天坚持联系。对学习代码来说,学习的最好方式就是动手练习

2022-06-22 15:38:01 379

原创 Java 中为什么禁止泛型数组

首先理解两个概念。在 Java 中, array具有共变性。共变性的意思是说,一个 类型为 T[ ] 的数组可以包含,类型为 T 的元素或者 subtype 类型为 T 的元素。所以我们可以这样做:不仅如此,如果 S 是 T 的 subtype, 一个类型为 S[ ] 的数组也是类型 T [ ]数组的 subtype。例如 Integer 是 Number 的 Subtype, 我们可以这么做:如果这样做呢? 不通过类型对象直接赋值。上面的代码直接给 类型为T[ ] 的数组赋值, 在编译期间是没有问题

2022-06-21 17:33:06 527 1

原创 python 模块与包

任何python文件都是模块。import 可以将 python 文件从一个模块导入另外一个模块。2.包包是管理模块的组织方法,对于大型文件结构,需要采取一定的格式。将__init__.py文件添加到目录,一般是空的。这个文件的主要目的是将模块拼接在一起。这时我们的导入包的方式就发生了变化,如下两种方式:注意:所有的导入都是绝对的,而不是相对的。3. 虚拟环境开发中,往往python 项目与项目作用不同,所以项目之间的依赖也往往不同。虚拟环境是管理 python 包第三方依赖的一种好方法。

2022-06-10 15:01:05 71

原创 python Logging

logging 模块是 python 的日志记录模块,是用于记录诊断信息的标准库模块。logging是高度可配置的,我们可以调整它的各个方面:输出文件、级别、消息格式等。日志记录用来记录异常捕获,供用户后期选择处理异常或者忽略异常。创建 logger 对象。日志消息等级。它们都创建了格式化的日志消息args与 %一起使用以创建消息。Logging 配置。一个完整的例子:......

2022-06-09 10:30:30 93

原创 python 测试,调试

Python 是一门动态编程语言,所以在运行之前,没有编译器来帮助我们发现程序的 Bug。运行代码是测试 Python 程序唯一能做的。assert语句是程序的内部检查。如果表达式不正确,则会引发AssertionError异常。例如:它的目的更多是用于内部检查和不变量(应该始终为真的条件),不应该用于检查用户输入(即,在网络表单或其他东西上输入的数据)。Contract Programming 是自由使用断言的一种设计软件方法,它规定软件设计者应该为软件的组件定义精确的接口规范。例如,对函数所有输入进

2022-06-09 10:04:28 347

原创 python 高级语法

介绍下 python 中常见的 *args 和 **kwargs 可变参数。一个函数接受任意数量的参数,称为使用可变参数,例如:1.2 关键字变量参数(**kwargs)一个函数也可以接受任意数量的关键字参数。例如:1.3 结合两者函数还可以接受任意数量的变量关键字和非关键字参数。1.4 扩展可变参数元组扩展可变参数字典扩展可变参数2. 回调函数与匿名函数sort()的列表排序sort()的字典排序匿名函数 LambdaLambda 允许直接在调用中定义一个特殊的处理函数。使用匿名函数

2022-06-08 10:36:44 757

原创 力扣 LeeCode 回溯类题目 括号生成,全排列,N皇后

22. 括号生成括号的匹配规则:左右括号成对,所以符合要求的括号对为 2n。接着嵌套回溯框架即可。Java解法:python 解法:46. 全排列嵌套回溯框架,尝试枚举每一个排列组合。Java 解法:python 解法:51. N 皇后皇后的放置顺序:接着嵌套回溯框架即可。C++解法:Java 解法:...

2022-06-07 23:41:31 166

原创 python 生成器

如下,调用__iter__()建立迭代器对象并调用__next__()方法迭代元素。常用的 for-loop 迭代使用了底层的迭代协议。生成器是使用 yield 定义迭代的任意函数。调用生成器会建立一个生成器对象,并不会马上输出结果。生成器使用__next__() 迭代输出。yield产生一个值,但暂停函数执行,该函数恢复执行在下一次调用__next__()时。生成器函数实现了与for语句在列表、元组、字典、文件等使用中,相同的低级迭代协议。列表推导式的生成器版本。与列表推导式的区别:不可重复使用

2022-06-07 09:57:55 182

原创 Python 对象的内部工作原理

Python 的对象系统是基于字典的实现。字典是 Python 中最常使用的数据结构,也是最重要的数据类型。在一个模块(Python 文件中),字典储存所有的全局变量和函数。输入以下指令可以查看储存当前文件变量或者类属性的字典。1.1 类中的对象管理Python 中的对象系统是在字典上的一个额外层。假设有一个股票类,其属性值为 name, shares, price实例一个对象,并查看储存类属性的字典:由于实例对象被分配在类的self 中,还可以以下方式查看。类字典每一个实例对象的属性,储存在自己

2022-06-06 11:45:46 159

原创 python 类

类是对象的集合。一个对象包括:类是对对象实例执行各种操作的函数。实例实例是在程序中操作的实际对象。通过将类作为函数调用来创建的,类语句只是定义,类似于函数的定义。每个实例都有自己的数据, 由 init() 提供。实例方法实例方法是应用于对象实例的函数。python 中对象本身总是作为第一个参数传递。类范围类中的方法没有定义范围。如果想引用它,使用 self.继承继承用于组织相关对象。继承用于扩展现有对象:当子类继承基类之后,可以使用基类方法。添加新方法。重新定义现有方法。Ove

2022-06-02 11:19:53 396

原创 python 对象

python 赋值操作只是引用副本。在以下例子中只有一个对象 [1,2,3],但有四个引用。在内存中的操作图片这意味着修改值会影响所有引用。重新分配重新分配一个值永远不会覆盖前一个值使用的内存。变量是名称,而不是内存位置。这是原始数据类型(int、float、string)不可变(只读)的原因之一。is比较对象标识(整数),也就是比较内存地址。可以使用 获得身份id()。“ == ” 只比较值。类型检查判断对象是否为特定类型。检查可能的类型之一。不要过度检查类型,它可能导致代码过

2022-06-02 10:28:12 81

原创 python collections 模块

将以下相似的两个元素合并到一起。使用 Counters,将键 IBM的 shares 值合并对total_shares 生成的字典值进行排名,使用 most_common()defaultdict 一对多映射使用 defaultdict 将同一键的 shares 和 price 合并成元组。deque 双端队列类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)。

2022-06-02 09:50:33 77

原创 python 序列

Python 具有三种序列数据类型。所有序列都是有序的,由整数索引,并有一个长度。序列可以复制。可以连接相同类型的序列。切片索引start和end必须是整数。切片范围左闭右开。如果省略索引,则它们默认为列表的开头或结尾。切片重新分配在列表中,可以重新分配和删除切片。序列缩减有一些常用函数可以将序列减少为单个值。for循环与枚举序列可以使用 for 循环遍历输出每个元素, 这里不再展示遍历列表和字符串的方法,看一下元组。可以使用多个迭代变量进行迭代。enumerate函数将一个额外的计数

2022-06-02 09:38:42 223

原创 python 容器(元组,字典和集合)

判断元组最直接的方法:看元素之间是否用逗号隔开。元组通常用于表示简单的记录或结构。通常,元组用来储存单个对象,将相关项目打包成一个实体,如下代码所示。元组就像数据库表中的单行。元组和字符串一样不支持修改但是可以基于当前元组创建一个新元组。可以将元组解压成变量,但左右变量的数量要一致。元组与列表的区别元组最常用于由多个不同类型组成的单个实例。列表通常是不同项目的集合,通常都是同一类型。字典字典是键到值的映射。它有时也称为哈希表或关联数组。键用作访问值的索引。字典的常用操作从字典中获取值

2022-06-01 14:50:41 115

原创 python 模块与命令行

python的模块与命令行

2022-06-01 11:32:45 382

原创 python 列表

列表操作

2022-06-01 10:37:22 68

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除