自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offer 35:复杂链表复制

复杂链表复制

2022-08-09 23:01:17 271 1

原创 剑指OFFER:26:树的子结构

剑指OFFER:26:树的子结构输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:true限制:0 <= 节点个数 <= 10000Related Topics树深度优先搜索二叉树深度优先遍历递归遍历A树的每一个节点是否和B

2022-04-26 10:50:24 1001

原创 剑指offer:调整数组顺序使奇数位于偶数前面

剑指offer:调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。提示:0 <= nums.length <= 500000 <= nums[i] <= 10000Related Topics数组双指针排序双指针public int[] excha

2022-04-25 19:50:32 499

原创 leetcode 111:二叉树的最小深度

leetcode 111:二叉树的最小深度给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。**说明:**叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示:树中节点数的范围在 [0, 105] 内-1000 <= Node.val <= 1000Relat

2022-04-22 14:50:32 155

原创 leetcode 108:将有序数组转换为二叉搜索树

leetcode 108:将有序数组转换为二叉搜索树给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:示例 2:输入:nums = [1,3]输出:[3,1]解释:[1

2022-04-22 10:06:53 106

原创 leetcode 107:二叉树的层序遍历II

leetcode 107:二叉树的层序遍历II给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[15,7],[9,20],[3]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]提示:树中节点数目在范围 [0, 2000] 内-1000 <= Node.va

2022-04-20 22:06:14 524

原创 leetcode 106:从中序与后序遍历序列构造二叉树

leetcode 106:从中序与后序遍历序列构造二叉树给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。示例 1:输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输出:[3,9,20,null,null,15,7]示例 2:输入:inorder = [-1], postorder = [-1]输出:[-1]

2022-04-20 21:47:25 546

原创 leetcode 51:N皇后

leetcode 51:N皇后n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存在两个不同的

2022-04-20 15:35:14 113

原创 leetcode 44:通配符匹配

leetcode 44:通配符匹配给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例

2022-04-20 10:39:49 248

原创 037:解数独

037:解数独编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 '.' 表示。示例 1:输入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9"

2022-04-19 22:09:15 161

原创 leetcode 30:串联所有单词的子串

leetcode 30:串联所有单词的子串给定一个字符串 s 和一些 长度相同 的单词 words **。**找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = "barfoothefoobarman", words = ["foo","bar"]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar

2022-04-17 22:21:59 96

原创 071:简化路径

071:简化路径给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/'。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式:始终以斜杠

2022-04-17 21:53:45 97

原创 leetcode 81:搜索旋转排序数组II

leetcode 81:搜索旋转排序数组II已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为

2022-04-17 21:25:04 87

原创 leetcode 82:删除排序链表中的重复元素II

leetcode 82:删除排序链表中的重复元素II给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序 排列Related Top

2022-04-17 20:31:57 393

原创 leetcode 86:分隔链表

leetcode 86:分隔链表给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。示例 1:输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]示例 2:输入:head = [2,1], x = 2输出:[1,2]提示:链表中节点的数目在范围 [0, 200] 内-100 <= Node.val &l

2022-04-17 20:10:42 349

原创 leetcode 11:旋转数组的最小数字

leetcode 11:旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ...,

2022-04-15 11:15:24 113

原创 leetcode91:解码方法

leetcode91:解码方法一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> "1"'B' -> "2"...'Z' -> "26"要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106"可以映射为:"AAJF" ,将消息分组为 (1 1 10 6)"KJF" ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6"

2022-04-09 11:09:21 71

原创 leetcode 92:反转链表

leetcode 92:反转链表给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5]提示:链表中节点数目为 n1 <= n &

2022-04-09 09:37:03 427

原创 leetcode 93:复原IP地址

leetcode 93:复原IP地址有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312"和 "[email protected]" 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成

2022-04-07 11:10:51 140

原创 leetcode 95: 不同的二叉搜索树

leetcode 95: 不同的二叉搜索树给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。示例 1:输入:n = 3输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]示例 2:输入:n = 1输出:[[1]]提示:1 <= n <= 8Related Topics树二叉搜索树

2022-04-06 19:42:10 1050

原创 03_mysql整体架构

整体架构server层2.1 连接器2.2 查询缓存2.3 分析器2.4 优化器2.5 执行器存储引擎层3.1 内存管理3.2 InnoDB引擎的四大特性3.2.1 插入缓存3.2.2 二次写(double write)3.2.3 自适应哈希3.2.4 预读3.3 InnoDB与MyISAM的对比日志系统4.1 binlog(归档日志)4.1 redo log(重做日志)4.3 redo log 与 binlog区别4.4 日志的更新流程4.5 如果数据库误操作, .

2022-04-06 16:55:35 714

原创 02_数据库范式

1. 范式范式概念第一范式确保每一列都保证原子性第二范式在第一范式的基础上,确保每一列都跟主键相关第三范式在前2个范式的基础上,确保每列都跟主键直接相关,而不是间接相关1.2 第二范式举例说明:比如要设计一个订单表,这个订单表将订单号和商品编号作为联合主键。这样就产生一个问题,该表中的商品详情不该与订单号主键相关联,而仅仅是与商品编号相关联,这样就不满足第二范式。因此,需要对这个表进行拆分,拆分为订单表(订单号),订单详情(订单号,商品编号,没有商品详

2022-04-05 19:23:03 481

原创 01_mysql基本语法

1. 基本概念表:表是一种结构化文件,可以用来存储某种特定的数据。数据库名和表名组合是唯一的。表由列组成,数据按行存储。主键:表中的每一行都应该有一列或者多列能够唯一标识自己,确保任意两条记录不能重复。通过这一列或多列区分不同的行,称之为主键。外键:关系数据库可以通过外键来实现一对一、一对多、多对多的关系。外键既可以设置数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来验证。1.1 数值类型如果是无符号类型,则范围是(0,有符号类型最大值*2+1)类型大小范围int

2022-04-05 19:19:31 573

原创 leetcode 97 : 交错字符串

leetcode 97 : 交错字符串给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + ... + snt = t1 + t2 + ... + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...

2022-04-05 11:56:12 227

原创 05_HTTP

1. HTTP协议1.1 简介HTTP(Hypertext Transfer Protocol)是超文本传输协议, 是一种无状态的、应用层的、以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统进行交互。主要特点如下:无状态:对于之前的访问状态等信息不会记录。请求/应答方式:由客户端发起请求,经过服务端处理后,返回响应给客户端。自描述消息格式:可以通过 Content-Type 来描述传输的消息类型,例如 application/json、text/htm

2022-04-04 22:50:44 1901

原创 04_应用层

文章目录1. Socket1.1 基于 TCP 协议1.1.1 服务器端1.1.2 客户端1.2 基于 UDP 协议1.2.1 服务端1.2.2 客户端2. DNS 协议2.1 使用的协议3. FTP 协议4. SMTP/POP31. Socket客户端和服务器端在通信前,双方都要建立一个套接字,然后再将套接字连接起来形成管道,进行数据传输。在创建 Socket 时,需要指定是 IPv4 还是 IPv6,分别对应设置为 AF_INET 和 AF_INET6;是 TCP 还是 UDP,分别对应设置为 S

2022-04-04 22:50:11 2059

原创 03_运输层

文章目录1. 基本概念2. UDP 协议2.1 ==主要特点==2.2 ==UDP 的首部格式==3. TCP 协议3.1 TCP的主要特点3.2 TCP 的连接3.3 TCP 报文段首部格式3.4 三次握手3.4.1 **三次握手确认双方的发送与接收能力**3.4.2 **==问题1:为什么不是两次握手而是三次握手?==**3.4.3 ==问题2:如果最后一次握手ACK丢失会出现什么状态?==3.4.3 **其他问题**3.4.4 **三次握手的缺陷**3.5 四次挥手3.5.1 ==问题3:为什么是四次

2022-04-04 22:49:14 1594

原创 02_网络层

文章目录1.简介2. IP 地址及分类2.1 ==地址解析协议 ARP==2.1.1 有了IP地址为什么还要MAC地址?2.2 划分子网2. ==ICMP(控制报文协议)==2.1 分类2.2 目的地无法到达2.3 超时2.4 重定向(ICMP重定向报文出现在何种场合)2.5 ping1.简介网络层向上只提供简单的、无连接的、尽最大努力交付的数据报服务。2. IP 地址及分类IP 地址是 IP 协议提供的一种统一的地址格式,为互联网中的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差

2022-04-04 22:48:31 1197

原创 01_网络体系结构

文章目录计算机网络知识点1. 协议结构1.1 OSI 七层模型1.2 TCP/IP 协议1.3 五层协议2. 常见的路由设备计算机网络知识点1. 协议结构一般复杂的程序问题都会使用分层结构来解决。网络协议进行分层,主要有以下几个好处:各层之间相互独立。某一层要想知道其它层所提供的服务,只需要通过层间接口。灵活性好。当某一层发生变化时,只要层间接口不变,则其他层不会受到影响。结构上可分开。分开后每一层可以使用最合适的技术来实现。易于实现和维护。这样一个庞大又复杂的网络协议系统,变得易于实现和

2022-04-04 22:47:42 1706

原创 leetcode 99: 恢复二叉搜索树

leetcode 99: 恢复二叉搜索树给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。示例 1:输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。示例 2:输入:root = [3,1,4,null,null,2]输出:[2,1,4,null,null,3]解释:2 不能在 3

2022-04-03 19:18:58 387

原创 leetcode 100:相同的树

leetcode 100:相同的树给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false提示:两棵树上的节点数目都在范围 [0, 100] 内-

2022-04-03 16:18:03 359

原创 leetcode 80:删除有序数组中的重复项II

leetcode 80:删除有序数组中的重复项II给你一个有序数组 nums ,请你** 原地** 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以**「引用」**方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做

2022-03-27 14:13:36 143

原创 leetcode 69:数字的平方根

leetcode 69:数字的平方根给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。**注意:**不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。示例 1:输入:x = 4输出:2示例 2:输入:x = 8输出:2解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。提示:0 <= x <= 231 - 1Rel

2022-03-27 11:52:28 145

原创 leetcode 67:二进制求和

leetcode 67:二进制求和给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"提示:每个字符串仅由字符 '0' 或 '1' 组成。1 <= a.length, b.length <= 10^4字符串如果不是 "0" ,就都不含前导零。Related Topi

2022-03-27 11:19:32 365

原创 leetcode 66:加一

leetcode 66:加一给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]

2022-03-27 11:01:43 179

原创 leetcode 63:不同路径II

leetcode 63:不同路径II一个机器人位于一个m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左

2022-03-27 10:30:36 66

原创 leetcode 57:插入区间

leetcode 57:插入区间给你一个 无重叠的 *,*按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例 1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例 2:输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2

2022-03-26 11:40:49 197

原创 leetcode 59:螺旋矩阵

leetcode 59:螺旋矩阵给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]提示:1 <= n <= 20Related Topics数组矩阵模拟一圈一圈遍历先确定i和j的最大和最小范围。先输入第一行,mini加1。输入最后一列,maxj减一。

2022-03-25 14:30:49 127

原创 leetcode 58:最后一个单词的长度

leetcode 58:最后一个单词的长度给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = "Hello World"输出:5解释:最后一个单词是“World”,长度为5。示例 2:输入:s = " fly me to the moon "输出:4解释:最后一个单词是“moon”,长度为4。示例 3:输入:s = "luffy is s

2022-03-24 12:04:28 638

原创 leetcode 38:外观数列

leetcode 38:外观数列给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1. 12. 113. 214. 12115. 111221第一项是数字 1

2022-03-24 11:47:44 225

空空如也

空空如也

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

TA关注的人

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