04 2020 档案
线程同步和互斥的区别
摘要:互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。 同步其实已经实现了互斥,所以同步是一种更为复杂的互斥。 互斥是一种特殊的同步。 所谓互斥,就是 阅读全文
posted @ 2020-04-29 14:54 topass123 阅读(329) 评论(0) 推荐(0) 编辑
同步与异步
摘要:同步: 同步的定义:是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么,这个进程将会一直等待下去,直到收到返回信息才继续执行下去。 特点: 同步是阻塞模式; 同步是按顺序执行,执行完一个再执行下一个,需要等待,协调运行; 异步: 是指进程不需要一直等下去,而是继续执行下面的操作 阅读全文
posted @ 2020-04-29 14:51 topass123 阅读(161) 评论(0) 推荐(0) 编辑
页面置换算法
摘要:操作系统将内存按照页面进行管理,在需要的时候才把进程相应的部分调入内存。当产生缺页中断时,需要选择一个页面写入。如果要换出的页面在内存中被修改过,变成了“脏”页面,那就需要先写会到磁盘。页面置换算法,就是要选出最合适的一个页面,使得置换的效率最高。 一、最优页面置换算法 最理想的状态下,我们给页面做 阅读全文
posted @ 2020-04-29 14:46 topass123 阅读(330) 评论(0) 推荐(0) 编辑
内存池、进程池、线程池
摘要:线程池:线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当需要一个开辟一个线程去做具体的工作时,就会唤醒线程池中的某一个睡眠线程,让它去做具体工作,当工作完成后,线程又处于睡眠状态,而不是将线程销毁。 进程池与线程池同理。 内存池: 阅读全文
posted @ 2020-04-29 13:53 topass123 阅读(208) 评论(0) 推荐(0) 编辑
进程调度
摘要:调度种类: 高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行; 中级调度:(Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。 低级调度:(Low-Level Scheduling) 阅读全文
posted @ 2020-04-29 13:41 topass123 阅读(329) 评论(0) 推荐(0) 编辑
为什么进程上下文切换比线程上下文切换代价高?
摘要:进程切换分两步: 1.切换页目录以使用新的地址空间 2.切换内核栈和硬件上下文 对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。 切换的性能消耗: 1、线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是 阅读全文
posted @ 2020-04-29 13:07 topass123 阅读(3295) 评论(0) 推荐(0) 编辑
VRRP概念、工作原理
摘要:VRRP是一种路由容错协议,也可以叫做备份路由协议,可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。 控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器, 它负责转发数据包到这些虚拟 IP地址。 当缺省路由器down掉(即端口关闭)之后,内部主机将无法与外部通信,如 阅读全文
posted @ 2020-04-29 07:11 topass123 阅读(1991) 评论(0) 推荐(0) 编辑
闲聊http1.1的6个方法
摘要:GET :获取资源GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。 POST :传输实体主体POST 方法用来传输实体的主体。虽然用 GET 方法也可以传输实体的主体,但一般不用 GET 方法进行传输,而是用 POST 方法。post不使用来获取主体内容。 阅读全文
posted @ 2020-04-28 15:40 topass123 阅读(330) 评论(0) 推荐(0) 编辑
URL和URI的区别
摘要:URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Locator 统一资源定位符 URI包括URL和URN两个类别,URL是URI的子集,所以URL一定是URI,而URI不一定是URL URI一般由三部组成 ①访 阅读全文
posted @ 2020-04-28 15:13 topass123 阅读(163) 评论(0) 推荐(0) 编辑
http与web
摘要:在看《图解http》的时候,忽然有一个想法冒出来。 web与http是什么关系? http服务器与web服务器有区别?为什么用以搞混了? web的定义:它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统 http的定义:网络传输协议。 从定义理解就不言而喻了,web是一 阅读全文
posted @ 2020-04-28 14:51 topass123 阅读(734) 评论(0) 推荐(0) 编辑
cdn
摘要:全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络 目的: 解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的 阅读全文
posted @ 2020-04-26 23:12 topass123 阅读(131) 评论(0) 推荐(0) 编辑
重建二叉树
摘要:if not preorder: return None # 空列表返回空树 r = TreeNode(preorder[0]) # 先序第一个元素一定是根 rid = inorder.index(preorder[0]) # 中序找出根,那么中序根左边是左子树,右边是右子树 r.left = se 阅读全文
posted @ 2020-04-25 22:07 topass123 阅读(135) 评论(0) 推荐(0) 编辑
二叉树到某一节点经过的路径
摘要:# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: 阅读全文
posted @ 2020-04-25 16:11 topass123 阅读(565) 评论(0) 推荐(0) 编辑
树的子结构(1)
摘要:# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None #先是比较树根左右边的是否相等。 阅读全文
posted @ 2020-04-24 23:35 topass123 阅读(174) 评论(0) 推荐(0) 编辑
二叉搜索树(2)
摘要:class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] res, queue = [], collections.deque() queue.append(root 阅读全文
posted @ 2020-04-24 12:51 topass123 阅读(141) 评论(0) 推荐(0) 编辑
二叉树(3)
摘要:# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: 阅读全文
posted @ 2020-04-24 11:29 topass123 阅读(159) 评论(0) 推荐(0) 编辑
二叉搜索树(1)
摘要:使用中序遍历,返回第k个数来处理 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None 阅读全文
posted @ 2020-04-24 00:10 topass123 阅读(142) 评论(0) 推荐(0) 编辑
树的实现(7)
摘要:# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: 阅读全文
posted @ 2020-04-23 23:40 topass123 阅读(146) 评论(0) 推荐(0) 编辑
树的练习(6)
摘要:很显然,这与前面的一题的本质区别是,不再是简单的追加。要区分追加的分类。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None 阅读全文
posted @ 2020-04-23 23:12 topass123 阅读(132) 评论(0) 推荐(0) 编辑
树的练习(5)
摘要:Python 中使用 collections 中的双端队列 deque() ,其 popleft() 方法是删除最左边的数字,可达到 O(1)时间复杂度;列表 list 的 pop(0) 方法时间复杂度为 O(N) 。 # Definition for a binary tree node. # c 阅读全文
posted @ 2020-04-23 23:03 topass123 阅读(148) 评论(0) 推荐(0) 编辑
树的练习(4)
摘要:class Solution: def isSymmetric(self, root: TreeNode) -> bool: def recur(L, R): if not L and not R: return True if not L or not R or L.val != R.val: r 阅读全文
posted @ 2020-04-23 16:46 topass123 阅读(194) 评论(0) 推荐(0) 编辑
树练习(3)
摘要:class Solution(object): def mirrorTree(self, root): if not root: return None; if not root.left and not root.right: return root; root.left,root.right=r 阅读全文
posted @ 2020-04-23 14:34 topass123 阅读(147) 评论(0) 推荐(0) 编辑
树的实现(2)
摘要:# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: 阅读全文
posted @ 2020-04-23 11:38 topass123 阅读(119) 评论(0) 推荐(0) 编辑
树的练习
摘要:使用dfs(深度优先) 使用递归的平衡因子的方法:9(0,0);15(0,0);7(0,0);20(1,1);3(1,2);很显然还需要+1,才可以实现树的深度记录。 class Solution: def maxDepth(self, root: TreeNode) -> int: if not  阅读全文
posted @ 2020-04-23 09:41 topass123 阅读(107) 评论(0) 推荐(0) 编辑
死锁问题
摘要:死锁的概念 所谓死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 它们都将无法推进下去,此时称系统处于死锁状态或系统产生了死锁。 死锁产生的四个必要条件 互斥条件:一个资源每次只能被一个进程使用;若其他进程申请使用该资源,必须等到该资源被释放为止; 请求 阅读全文
posted @ 2020-04-22 21:14 topass123 阅读(136) 评论(0) 推荐(0) 编辑
进程的三种状态
摘要:进程的状态有:运行态,就绪台,阻塞态。如下图示: 注意区别就绪状态和等待状态:就绪状态是指进程仅缺少cpu,只要获得cpu资源就立即执行;而等待状态是指进程需要其他资源(除了cpu)或等待某一事件。 用户态和核心态的区别。 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运 阅读全文
posted @ 2020-04-22 15:43 topass123 阅读(2482) 评论(0) 推荐(1) 编辑
线程的同步与实现
摘要:线程同步的方式: 1)临界区:通过对多线程的串行化来访问公共资源或者一段代码,速度快,适合控制数据访问 2)互斥量:只有用户互斥对象的线程才可以访问公共资源。互斥不仅仅能够实现统一应用程序的公共资源安全共享,还可以实现不同应用的公共资源的安全共享。 3)信号量:它允许同一时刻多个线程访问同一资源,但 阅读全文
posted @ 2020-04-22 14:36 topass123 阅读(138) 评论(0) 推荐(0) 编辑
进程间通信详解
摘要:一、管道 管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。 1、特点: 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。 它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、writ 阅读全文
posted @ 2020-04-22 11:25 topass123 阅读(278) 评论(0) 推荐(0) 编辑
进程和线程以及它们的区别
摘要:进程?线程? 进程是对运行程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发。 其实现的过程:用户运行xx程序,系统就创建一个进程同时为其分配(内存空间,磁盘空间,I/O设备)资源,将该进程放到就绪队列中等待,被进程调度器选中。这就运行起来了。 线程是进程的子任务,是cpu调度和分 阅读全文
posted @ 2020-04-22 11:06 topass123 阅读(222) 评论(0) 推荐(0) 编辑
https协议
摘要:HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。 HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。 注意:TLS是ssl的前身。 http与https的区别 https协议需要到ca申请证书, 阅读全文
posted @ 2020-04-22 08:44 topass123 阅读(200) 评论(0) 推荐(0) 编辑
http协议
摘要:http是超文本传输协议,基于TCP/IP协议通讯来传递消息。 HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP默认端口号为80。 HTTP特点:无状态:协议对客户端 阅读全文
posted @ 2020-04-22 00:08 topass123 阅读(133) 评论(0) 推荐(0) 编辑
python的深浅拷贝
摘要:浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;改变原始对象中为不可变类型的元素的值,不会响拷贝对象。 地址是完全一致的。 #定义一个列表,第一个元素是可变类型>>> A = [[2],'fei',90]#浅拷贝 >>> B = copy.copy(A)#对象地址是否相同 >>> 阅读全文
posted @ 2020-04-19 23:59 topass123 阅读(163) 评论(0) 推荐(0) 编辑
python的可变类型与不可变类型
摘要:不可变数据类型 不可变数据类型在第一次声明赋值声明的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值, 而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内存地址, 通过这个地址, 变量就可以在内存中取出数据了. 所谓不可变就是说, 我们不能改变这个数据在内存中的值 阅读全文
posted @ 2020-04-19 23:51 topass123 阅读(147) 评论(0) 推荐(0) 编辑
ubuntu安装flash
摘要:在b站中,查看视频。下载flash 下载 到此安装成功! 2.安装Adobe Flash插件 sudo apt update sudo apt install adobe-flashplugin browser-plugin-freshplayer-pepperflash 阅读全文
posted @ 2020-04-16 23:27 topass123 阅读(145) 评论(0) 推荐(0) 编辑
二叉树的实现
摘要:递归的方式:1.二叉树遍历实现注意: 1.数据构造是根据中间,左,右的方式实现的。 2.树的建成都是由底部到顶部 3.先序遍历【中左右】 中序遍历【左中右】 后序遍历【左右中】class TreeNode(object): def __init__(self, data=0,left=0,right 阅读全文
posted @ 2020-04-16 13:36 topass123 阅读(141) 评论(0) 推荐(0) 编辑
设计模式-门面模式(三)
摘要:门面模式与单例模式,工厂模式不同,它是一种结构型模式。 结构型模式是一种能够简化设计工作的模式,它能找出更简单的方法来认识或表示实体之间的关系。 结构型模式是类和对象模式的综合体。类模式通过继承来描述抽象,从而提供更有用的程序接口,而对象模式描述了如何将对象联系起来从而组合成更大的对象。 门面设计模 阅读全文
posted @ 2020-04-15 16:16 topass123 阅读(122) 评论(0) 推荐(0) 编辑
设计模式-工厂模式(二)
摘要:定义: 工厂模式依然是一种创建型设计模式,作为工厂,它所关心的是产品的产生,也就是对象的创建,我们利用工厂来创建对象,而不必我们亲自创建对象,我们无需去理解如何创建对象,只需要向工厂提出要求,让工厂去根据你的要求,给你生产你要的产品,给你相应的对象,这种模式便叫做工厂模式。 工厂模式的优点: 松耦合 阅读全文
posted @ 2020-04-15 16:03 topass123 阅读(124) 评论(0) 推荐(0) 编辑
设计模式-单例模式(一)
摘要:单例模式 特点:要求一个类仅有一个实例,并且提供一个访问该实例的全局访问点。 优点:1」单例模式可以在系统设计一个全局访问点,例如设计一个单例类,负责对所有数据表的处理 2」创建一个单例模式,减少系统的消耗。当一个对象启动消耗的资源比较的多的时候, 可以通过其他应用启动一个单例对象,使其永久驻留内存 阅读全文
posted @ 2020-04-15 15:37 topass123 阅读(133) 评论(0) 推荐(0) 编辑
红黑树
摘要:黑树属于平衡二叉树。它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1,但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。红黑树(red-black tree) 是一棵满足下述性质的二叉查找树:1. 每一个结点要么是红色,要么是黑色。2. 根结点是黑色的。3. 阅读全文
posted @ 2020-04-12 11:11 topass123 阅读(225) 评论(0) 推荐(0) 编辑
hash算法解决冲突的方案
摘要:1, 开放定址法: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 公式为:fi(key) = (f(key)+di) MOD m (di=1,2,3,……,m-1) ※ 用开放定址法解决冲突的做法是:当冲突发生时,使用某种探测技 阅读全文
posted @ 2020-04-12 09:27 topass123 阅读(173) 评论(0) 推荐(0) 编辑
udp包最大数据长度是多少
摘要:因为udp包头有2个byte用于记录包体长度. 2个byte可表示最大值为: 2^16-1=64K-1=65535 udp包头占8字节, ip包头占20字节, 65535-28 = 65507 如果要发送的udp报文大于65507怎么办? 需要在应用层由开发者自己分片发送. 阅读全文
posted @ 2020-04-11 21:34 topass123 阅读(1792) 评论(0) 推荐(0) 编辑
解决粘包问题
摘要:数据粘包,是由于tcp其独特的流式传输导致的。 产生的场景有; 第一种:发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包) from socket import * ip_port=('127.0.0.1',8080) tcp_socket_serve 阅读全文
posted @ 2020-04-11 21:24 topass123 阅读(223) 评论(0) 推荐(0) 编辑
设计可靠的udp
摘要:推荐链接: https://www.cnblogs.com/lixiang-share/p/7152870.html 阅读全文
posted @ 2020-04-11 21:09 topass123 阅读(155) 评论(0) 推荐(0) 编辑
select和epoll区别
摘要:select、epoll 区别总结: 1、支持一个进程所能打开的最大连接数 select 单个进程所能打开的最大连接数有FD_SETSIZE宏定义,其大小是32个整数的大小(在32位的机器上,大小就是3232,同理64位机器上FD_SETSIZE为3264),当然我们可以对进行修改,然后重新编译内核 阅读全文
posted @ 2020-04-11 20:56 topass123 阅读(1372) 评论(0) 推荐(0) 编辑
为什么要用线程池
摘要:多线程的情况下确实可以最大限度发挥多核处理器的计算能力,提高系统的吞吐量和性能。但是如果随意使用线程,对系统的性能反而有不利影响。 当线程数量多大时,反而会耗尽cpu和内存资源。比如说,创建和销毁线程也需要时间,如果创建和销毁的时间远大于线程执行的时间,反而得不偿失。其次线程也需要占用内存空间,大量 阅读全文
posted @ 2020-04-11 20:49 topass123 阅读(160) 评论(0) 推荐(0) 编辑
ip分片
摘要:一、什么是IP分片? IP协议在传输数据包时会将数据报文分成若干片进行传输,并在目标系统中进行重组。这个过程就要分片。 二、为什么要进行IP分片 如果IP数据报加上数据帧头部后大于MTU,数据报文就会分成若干片进行传输。那么什么是MTU呢?每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MT 阅读全文
posted @ 2020-04-11 20:38 topass123 阅读(712) 评论(0) 推荐(0) 编辑
TIME_WAIT的危害与避免
摘要:time-wait的产生: 在TCP连接中四次挥手关闭连接时,主动关闭连接的一方(上图中时Client)会在发送最后一条ACK报文后维持一段时长2MSL(MSL指的是数据包在网络中的最大生存时间)的等待时间后才会真正关闭连接到CLOSED状态,该时间段内主动关闭方的状态为TIME_WAIT。即在TI 阅读全文
posted @ 2020-04-11 20:20 topass123 阅读(689) 评论(0) 推荐(0) 编辑
堆和堆排序
摘要:堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。 两种类型的概念如下:大根堆(最大堆):每个结点的值都大于或等于左右孩子结点小根堆(最小堆):每个结点的值都小于或等于左右孩子结点 以大根堆为例子:【堆是无序的】 堆的三种操作:插入,删除,构建。 阅读全文
posted @ 2020-04-09 18:55 topass123 阅读(480) 评论(0) 推荐(0) 编辑
稳定排序和不稳定排序的区别和代表
摘要:稳定性的定义与意义: 通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。 如果是不稳定排序,则需要第二次排序,会增加系统开销。 选择排序: 举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏 阅读全文
posted @ 2020-04-09 11:43 topass123 阅读(3082) 评论(0) 推荐(0) 编辑
Python(10)
摘要:如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合? # 注意是三重循环 for a in range(0, 1001): for b in range(0, 1001): for c in range(0, 1001): if a**2 阅读全文
posted @ 2020-04-09 08:43 topass123 阅读(147) 评论(0) 推荐(0) 编辑
平衡二叉树与哈夫曼树(5)
摘要:有了二叉排序树就可以使插入、搜索效率大大提高了,为什么还要引入平衡二叉树? 二叉搜索树的结构与值的插入顺序有关,同一组数,若其元素的插入顺序不同,二叉搜索树的结构是千差万别的。举个例子,给出一组数[1,3,5,8,9,13]。 若按照[1,3,5,8,9,13]这样的顺序插入 如果在上面的二叉搜索树 阅读全文
posted @ 2020-04-08 22:15 topass123 阅读(506) 评论(0) 推荐(0) 编辑
Python(5)
摘要:把 aaabbcccd 这种形式的字符串压缩成 a3b2c3d1 这种形式。 print(''.join({i+str(s.count(i)) for i in s})) View Code dic={} for i in s: if i in dic: dic[i]+=1 else: dic[i] 阅读全文
posted @ 2020-04-08 15:13 topass123 阅读(164) 评论(0) 推荐(0) 编辑
数据结构树(1)
摘要:树的相关概念; 根节点:有一个特定的结点被称为根结点或树根(root) 节点:每个元素称为结点(node) 边:入边与出边 如下图: 空集合也是树,称为空树。空树中没有结点。 结点的度:一个结点含有的子结点的个数称为该结点的度; 叶结点或终端结点:度为0的结点称为叶结点; 双亲结点或父结点:若一个结 阅读全文
posted @ 2020-04-08 15:10 topass123 阅读(123) 评论(0) 推荐(0) 编辑
二叉排序树(4)
摘要:二叉排序树(Binary Sort Tree),亦称二叉搜索。 特点: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的结点。 平均查找长度= 每个结点的深度 阅读全文
posted @ 2020-04-08 15:09 topass123 阅读(158) 评论(0) 推荐(0) 编辑
数据结构树-二叉树的实现(3)
摘要:使用列表实现二叉树: def BinarTree(r): return [r,[],[]] def insertLeft(root,newBrach): t=root.pop(1) if len(t)>1: root.inset(1,[newBrach,t,[]]) else: root.inser 阅读全文
posted @ 2020-04-07 14:20 topass123 阅读(129) 评论(0) 推荐(0) 编辑
两个数相加等于目标值(8)
摘要:给出一个数字列表和一个目标值(target),假设列表中有且仅有两个数相加等于目标值,我们要做的就是找到这两个数,并返回他们的索引值。 解决方案: 通过创建字典,将nums里的值和序号对应起来,并创建另一个字典存储目标值(Target)-nums的值,通过判断该值是否在nums内进行判断并返回其对应 阅读全文
posted @ 2020-04-07 09:38 topass123 阅读(232) 评论(0) 推荐(0) 编辑
不含有重复字符的 最长子串 的长度(6)
摘要:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 这道题主要用到思路是:滑动窗口 什么是滑动窗口? 其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不 阅读全文
posted @ 2020-04-07 08:57 topass123 阅读(187) 评论(0) 推荐(0) 编辑
广播路由算法的实现与避免
摘要:广播的风暴的形成: r1向r2发送广播 r2向r3与r4发送广播 但是r3与r4也互相发送广播。这就形成广播风暴。 如何避免: 1。控制广播 一一种很简单的方法,就是给这一一份广播分组做一一个标记。例如,源节点(发起广广播的节点)可以将其地址以及广播序号放入这个广播分组中,然后发送给他的所有邻居节点 阅读全文
posted @ 2020-04-06 12:14 topass123 阅读(474) 评论(0) 推荐(0) 编辑
理解kmp算法
摘要:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。 暴力匹配算法 假设现在我们面临这样一个 阅读全文
posted @ 2020-04-05 21:55 topass123 阅读(132) 评论(0) 推荐(0) 编辑
动态规划(8)
摘要:定义一个二维数组dp,dp[i][j]表示s的前i个字符和p的前j个字符是匹配的dp[i][j]的计算方式如下 首先设置dp[0][0]为true,因为两个空字符是匹配的 如果i = 0, 那么表示以空字符串去匹配p的前j个字符,我们期望p[j] == , 这样之前的字符不用出现,dp[i][j] 阅读全文
posted @ 2020-04-05 15:51 topass123 阅读(108) 评论(0) 推荐(0) 编辑
动态规划(7)
摘要:class Solution: def cuttingRope(self, n: int) -> int: dp=[0 for _ in range(n+1)] dp[2]=1 for i in range(3,n+1): for j in range(i): dp[i]=max(dp[i],max 阅读全文
posted @ 2020-04-05 14:52 topass123 阅读(182) 评论(0) 推荐(0) 编辑
动态规划(6)
摘要:class Solution: def cuttingRope(self, n: int) -> int: dp = [0 for _ in range(n + 1)] # dp[0] dp[1]其实没用 dp[2] = 1 # 初始化 res = -1 for i in range(3, n + 阅读全文
posted @ 2020-04-05 13:27 topass123 阅读(147) 评论(0) 推荐(0) 编辑
动态规划(5)
摘要:class Solution: def maxProfit(self, prices: List[int]) -> int: if prices == []: return 0 min = prices[0] max_num = 0 for i in range(len(prices)): if p 阅读全文
posted @ 2020-04-05 09:22 topass123 阅读(120) 评论(0) 推荐(0) 编辑
动态规划(4)
摘要:class Solution: def maxValue(self, grid: List[List[int]]) -> int: for i in range(len(grid)): for j in range(len(grid[0])): if i == 0 and j == 0: conti 阅读全文
posted @ 2020-04-05 09:01 topass123 阅读(157) 评论(0) 推荐(0) 编辑
动态规划(3)
摘要:class Solution: def maxSubArray(self, nums: List[int]) -> int: maxnum = nums[0] for i in range(1,len(nums)): if nums[i - 1] > 0: nums[i] += nums[i - 1 阅读全文
posted @ 2020-04-04 23:25 topass123 阅读(139) 评论(0) 推荐(0) 编辑
动态规划(2)
摘要:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。 来源:力扣(LeetCo 阅读全文
posted @ 2020-04-02 08:45 topass123 阅读(165) 评论(0) 推荐(0) 编辑
动态规划(1)
摘要:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径? 来源:力扣(LeetCod 阅读全文
posted @ 2020-04-02 07:53 topass123 阅读(151) 评论(0) 推荐(0) 编辑
dockerfile构架镜像(8)
摘要:nginx镜像的构建 先查看下本地的镜像,选取官网的centos作为base image: [root@server ~]# docker images 创建一个目录专门用来存放的目录,也就是Dockerfile所在的目录 [root@server ~]# mkdir myNginx [root@s 阅读全文
posted @ 2020-04-01 15:47 topass123 阅读(164) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示