自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Leetcode——146. LRU 缓存机制

题目描述:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key):如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value):如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数

2021-02-26 15:44:29 228

原创 大数操作——BigInteger、BigDecimal

今天又是收获的一天~~关于学习大数操作来源于一道编程题:以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。当时我看到这道题第一反应就是把两个串通过nteger.valueOf()转为Integer然后想加,但事实并没有这么简单,不然怎末叫大数相加呢~好了,来进入正题我们知道在Java中,存储整行最大的范围就是long类型----64比特位,但是如果大于这个值又改怎末办?同样的,对于浮点数double类型的精度只能达到16为,要是精度高于16位呢?这里就引入了大数操作——Bi

2021-02-21 20:36:27 790 6

原创 坏键盘

题目描述:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入描述:输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。输出描述:按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。示例1输入7_This_

2021-02-17 17:16:36 256

原创 leetcode--88. 合并两个有序数组

题目描述:给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别为 m 和 n。示例:输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3输出: [1,2,2,3,5,6]说明:A.length == n + m思路一:将B数组添加到A数组后边然后进行排序即可class Solution { public void m

2021-02-04 22:35:47 186

原创 leetcode---1. 两数之和

题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。思路一:使用hashMap将数组中的值和对应的下标存入map中遍历该数组,k

2021-02-02 21:13:12 106 2

原创 Leetcode---283. 移动零

题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。思路分析:在题目说明中,不能拷贝额外的数组,也就是空间复杂度为O(1);尽量减少操作次数,言外之意就是时间复杂度尽量达到O(n);然后还要保证非零元素的相对位置;这仔细一想,感觉好像有点东西;这种一般在原数组上改数据我们可以考虑双下标来实现(即:用两个变

2021-02-02 17:17:24 85 1

原创 八大排序(3)------归并排序

思想:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。总而言之,归并排序总体分为两步:分解与合并先分解为许多有序的子区间,然后再将这些有序的子区间合并成一个有序区间。见如下图所示:因此,我们在实现该算法时就分为三步:将区间划分为两部分将这两部分分为有序的子区间将子区间合并成一个有序区间首先,我们先将整体思路

2021-01-03 20:30:11 119

原创 八大排序(2)------交换排序(冒泡、快排)

排序一、交换排序1、冒泡排序1、快速排序二、归并排序三、基数排序一、交换排序1、冒泡排序1、快速排序二、归并排序三、基数排序

2020-12-23 20:19:28 388 2

原创 在线聊天室(B/S、servlet、websocket、JDBC)

在线聊天室一、项目简介后端技术项目需求数据库设计项目结构二、项目具体实现一、项目简介该聊天室项目使用的是B/S架构,实现一个在线聊天室, 实现注册、登录、在线用户群聊、不同频道等功能。后端技术后端使用Java语言,主要的技术有servlet、websocket、JDBC、json等;servlet:配置资源映射websocket:websocket是一个应用层的协议,使用websocket来实现“消息推送”JDBC:实现数据库连接管理json:解析和封装数据,使用Gson库使用的开发工

2020-12-20 18:25:07 1766 4

原创 八大排序(1)--------插入排序(直接插入、希尔)、选择排序(选择排序、堆排序)

排序算法一、排序介绍1、排序算法分类2、排序性能指标二、插入排序1、直接插入排序2、希尔排序一、排序介绍排序算法,顾名思义,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。1、排序算法分类对于排序算法,主要分为两大类:内部排序和外部排序;内部排序是数据记录在内存中进行排序;外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。比如:100亿个整型数据需要被排序,这写数据需要占(100亿*4字节)/1000^3=大概需要40G内存空间

2020-12-19 16:20:37 815 4

原创 堆——数据结构

这里写自定义目录标题堆的基本概念堆的常用方法构建首先,要说明一下本篇文章说的堆和JVM内存结构里边的堆是两个东西。它是优先级队列的底层数据结构。new出来的空间(new一个对象)-------->这里的堆指的是一块具有特殊作用的内存空间(JVM内存区域中)优先级队列的底层数据结构 ------->这里的堆是一种数据结构那么什么是堆这种数据结构呢?堆的基本概念这个堆是建立在完全二叉树的存储方式上,我们知道完全二叉树适合用顺序的存储方式来存储,因为它是没有满的满二叉树,所以通过数组来

2020-12-17 17:03:45 1234 2

原创 IntelliJ IDEA对tomcat配置详细过程

解决IntelliJ IDEA控制台输出中文乱码问题

2020-11-22 12:18:27 1739 1

原创 Maven的配置及使用

这里写目录标题一、什么是maven?二、maven项目的基本结构三、maven的配置文件1、全局配置文件(settings.xml)1)settings.xml文件位置2)指定本地仓库3)配置阿里云镜像:2、项目配置文件(pom.xml)1)依赖2)插件四、maven的生命周期一、什么是maven?Apache Maven 是一种用于软件项目管理工具,基于 Project Object Model(POM),用来管理项目的构建,汇报及文档生成等功能。我们知道了maven是一种项目管理工具之后,最主要的

2020-11-21 18:04:10 917 2

原创 IntelliJ IDEA中创建一个Maven项目以及对maven的设置

我们在做一个基于maven的web项目时,离不开一些开发工具和配置,常用的开发工具有:jdk、 maven、maven仓库、tomcat等。在使用他们之前,我们首先要下载安装,对于下载安装的路径我们建议:不要放在C盘路径不要带中文、不带空格或者特殊符号一、IDEA创建maven项目在idea中选择file—>new—>project在newProject中左侧选择maven,右侧在Create from archetype前面的勾打上对号,然后选中下面的序号三。完了之后点击右下

2020-11-21 11:43:59 381

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

题目描述:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:分析:看到这道题是不是想到了根据前序遍历和中序遍历构造二叉树,没错前序遍历是先遍历根节点,再遍历左右子树;而后序遍历是先遍历左右子树再遍历根节点。那么我们就可以根据之前那道题的做法,将后序遍历的结果从后向前依次构建每个根节点(因为后序是最后访问根节点的),然

2020-11-19 15:18:07 101

原创 Leetcode-105:从前序与中序遍历序列构造二叉树

题目描述:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]分析:我们知道,中序遍历是左子树----根节点----右子树:所以根节点的左侧元素就是该节点的左子树,右侧就是该节点的右子树。比如上面的二叉树,中序遍历结果是 [9,3,15,20,7],根节点是3,然后3的左侧为【9】,那么9就是3的左子树,3的右侧[15,20,7]就是它的右

2020-11-18 17:50:41 143

原创 二叉搜索树转化为双向链表

题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向

2020-11-15 20:03:44 954

原创 创建二叉树

题目描述:编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。这道题的意思就是给定一个二叉树前序遍历的序列,然后让

2020-11-14 14:45:30 1096

原创 Leetcode-236:二叉树的最近公共祖先(两种方法)

题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]代码:class Solution { public TreeNode lowestCommonAncestor(TreeNode roo

2020-11-14 14:40:53 83

原创 判断是否为完全二叉树(两种方法)

完全二叉树也就是没有满的满二叉树,它的节点在每一层一定是连续分布的。如果出现哪一层中两个非空节点间隔一个空节点,那一定不是完全二叉树。如下图所示:假设这棵完全二叉树有K层,因此我们可以总结一下完全二叉树的规律:前K-2层:每个节点都有两个孩子,节点饱和前K-1层:节点肯定是饱和的—>到达了最大值第K-1层:不一定所有的节点都有孩子节点,如果有孩子节点,至少要是左孩子节点,有可能出现不饱和节点方法一:从上面的规律中我们可以知道:完全二叉树的前k-1层一定是包和节点,第k-1层就可能

2020-11-07 11:59:11 39287 17

原创 Leetcode-102: 二叉树的层序遍历

二叉树的层序遍历,顾名思义是按照二叉树的每一层进行遍历的,如下图的二叉树,它的层序遍历顺序就是:A B C D E F G H我们发现层序遍历就是按照一层一层的顺序访问的,那么此时就可以联想到队列先进先出的特性,即:对于二叉树从上往下从左往右依次放到队列中,并且遍历一遍即可。步骤:空树:直接返回二叉树不为空:将根节点入队列,并循环执行以下操作(循环条件:队列不为空):取队头元素,遍历该元素并且从队列中删除:cur=queue.poll();如果cur有左孩子:入队列如果cur有右孩子:入

2020-11-07 09:10:20 231 2

原创 Leetcode101: 对称二叉树(递归、双端队列)

题目描述:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:分析:看到这道题,是不是会首先联想到二叉树的镜像.,没错,我们通过题目给出的样例来看,如下图所示:发现如果对称的话是关于以根节点为对称轴左右对称的,即:左子树的左孩子和右子树的右孩子相等。那么如果把右子树变为右子树的镜像,是不是只需要判断根节点的左右子树是否相等即可。于是那么我们是不是可以总结出:如果一棵二叉

2020-11-06 11:26:57 202 2

原创 剑指 Offer 27:二叉树的镜像(两种解法)

题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:分析:什么是一棵二叉树的镜像呢?二叉树的镜像就是交换二叉树中每个节点的做左右子树。

2020-11-06 09:00:10 198 1

原创 Leetcode-572: 另一个树的子树( leetcode100:相同的树 )

题目描述:给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s:思路:一棵树是否为另一棵树的子树,那么只需要判断第一棵树中的每个节点为根节点的子树是为和另一棵树相等。那麽此时就需要来实现判断两棵树是否是同一棵树的方法,即:leetcode-100. 相同的树....

2020-11-04 15:33:39 272 5

原创 Leetcode—110: 平衡二叉树(两种解法)

题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。分析:平衡二叉树的定义就是要求每个节点的左右两棵子树的高度差的绝对值不超过1,所以问题的关键就是需要求出每个节点的高度差,然后判断。思路一:考虑的关键:!!!一开始我思考能不能直接通过一个递归函数就把每一个节点的高度差计算出来,但是通过实践以及思考,发现:计算高度差必须先求出左右子树的高度,然后做差!如果直接将递归函数返回高度差,上一层的

2020-10-31 15:19:52 422

原创 二叉树 Ⅳ —— 二叉树基本操作

二叉树1、求总结点个数2、求叶子结点个数3、求第 k 层结点个数4、获取二叉树的高度5、判断这个节点是否在树中1、求总结点个数很明确,就是求该二叉树总共有多少节点数。那么,一棵二叉树节点之和就等于根节点+左子树节点数+右子树节点数。而左/右子树又可以看成一棵新的二叉树,节点数依然等于左右子树的根节点+其左右子树的节点数,依次类推。题解关键:整体问题拆分成小问题------》每一个子树的节点等于左子树节点数+右子树节点数+根节点对于上面节点总数的求法,我们不难看出可以采用递归的求法。代码:publ

2020-10-31 11:49:41 429

原创 二叉树 III —— 二叉树非递归遍历(前、中、后序)

二叉树非递归遍历前序非递归遍历中序非递归遍历后序非递归遍历在上一篇博客中我们介绍了二叉树的前中后序递归遍历,本篇博客我们来看看如何将递归遍历变为非递归遍历。博客链接:二叉树存储、递归遍历(前、中、后序).前序非递归遍历对于前序遍历我们知道它的访问顺序是根节点---->根节点的左子树---->根节点的右子树。对于递归改为非递归,一般有两种思路:借助栈实现通过for循环实现因此,我们的递归遍历就采用借助栈来实现。并且对于前序非递归遍历我们有两种思路。思路一:我们先思考一下,前序

2020-10-30 12:57:59 119

原创 二叉树 II —— 二叉树存储、递归遍历(前、中、后序)

二叉树的存储我们在上一篇博客中提到了二叉树的存储方式,二**叉树的存储结构分为:顺序存储和类似于链表的链式存储。博客链接:二叉树 I ——二叉树概念、性质.顺序存储结构主要用来存储完全二叉树而对于非完全二叉树(尤其是节点高度相差较大的节点采用链式存储)本片博客主要说一下二叉树的链式存储:二叉树和链表类似,主要通过结点的组合来表示二叉树,我们也知道二叉树的节点主要包括:值域、左孩子节点、右孩子节点、父节点(可选),因此,二叉树有如下表示形式:孩子表示法:class Node { in

2020-10-30 11:14:22 158

原创 二叉树 I —— 二叉树概念、性质

一、二叉树概念二叉树:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点。二叉树的子树有左右之分,其子树的次序不能颠倒。两种特殊的二叉树满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1,则它就是满二叉树。完全二叉树:完全二叉树是效率很高的数据结构,完全二叉

2020-10-28 20:19:58 1030

原创 Leetcode-707:设计链表(单链表、双链表)

题目描述:设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将

2020-10-28 16:00:34 146

原创 Leetcode 21-合并两个有序链表

这个题常规思路确实很简单,但是在考虑递归写法的时候,我又一次被打击了,真的就是一看就会,一写就废的那种!!!题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思路一:最常规的思路:遍历两个链表,比对每一个节点,每次将节点值较小的串起来,思路很简单,代码人很容易。代码:class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(

2020-10-25 19:58:40 84

原创 JVM II —— 类加载

类加载一、类加载的理解二、类的生命周期1、加载2、验证3、准备4、解析5、初始化< clinit>()方法介绍:初始化顺序需要初始化的5种情况:二、类加载器启动类加载器(Bootstrap ClassLoader)扩展类加载器(Extension ClassLoader)应用程序类加载器(Application ClassLoader)三、类加载机制一、类加载的理解什么时候会进行类加载?---------->当用到一个类,但是这个类不在内存中,这个时候就需要发生类加载。那麽问题来了

2020-10-25 16:10:55 110 1

原创 JVM之垃圾回收 III ——垃圾回收算法、垃圾回收器

垃圾回收一、垃圾回收算法1、标记-清除算法(Mark-Sweep算法)2、复制算法(Copying算法)3、标记-整理算法(Mark-Compact算法)4、分代收集算法(Generatinal Collection)二、垃圾回收器1、Serial收集器1、ParNew收集器一、垃圾回收算法1、标记-清除算法(Mark-Sweep算法)1)最基础的收集算法,老年代收集算法:之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进的。2)算法分为“标记”和“清除”两个阶段:

2020-10-22 17:52:01 111

原创 JVM之垃圾回收 II ——方法区和堆区的垃圾回收、STW

一、需要垃圾回收的内存我们在上一篇博客中已经对JVM运行时内存的各个区域分析了他们是否需要垃圾回收。JVM之垃圾回收 I .栈区/PC区: 它两是线程私有内存,和线程是强相关的,线程创建划分内存,线程结束释放,他是有严格的内存划分的,不需要垃圾回收。常量池+方法区: 由于Java大量框架的使用(反射、动态代理等),而反射代码会造成方法区中的类急速膨胀,经常调用反射会造成方法区中的类特别多,因此方法区的回收会变得更严格。因此方法区也是垃圾回收考虑的一部分。堆区: 堆是对象的主要区域,创建的对象大多数在

2020-10-21 18:24:30 1724 2

原创 JVM之垃圾回收 I —— 垃圾回收策略、finalize()方法、四种引用

垃圾回收我们在上一篇博客:JVM I——JVM理解及内存区域划分 中提到了JVM中的动态内存管理器,它主要为程序动态的分配/回收内存空间的。而我们现在要说的垃圾回收(GC)的本质就是动态内存分配器。对比我们之前学过的c/c++,我们创建对象是通过new来创建这个对象并且分配好内存空间,在使用结束后需要通过free来释放掉这个对象的内存空间。这些都是我们程序员需要注意的问题,如果一味的创建对象开辟空间而不释放的话就会导致内存溢出。那么,Java是如何做的呢?我们知道Java中没有free来通过程序员

2020-10-19 21:28:50 373

原创 JVM I——JVM理解及内存区域划分

一、JVM介绍JVM 即:java 虚拟机。JVM最早的设计理念是:一次编写,多次运行。即,当时是为了让一份代码能够兼容多个操作系统的初衷。比如一份业务在不同的操作系统上有不同的代码(也就是一份相同的逻辑需要写多份),而Java为了解决这个问题就设计出了JVM来能够兼容多个操作系统的代码来执行。但是随着技术的不断发展,现在很少将Windows的程序放在Linux上,所以Java还是保留了这个特性,不算优点也不算缺点。JVM与其他的虚拟机有什么不同呢?jvm:只虚拟了部分功能,相当于只为Java系

2020-10-17 16:21:46 723 2

原创 Leetcode-剑指 Offer 16: 数值的整数次方

题目描述:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。分析:这个题第一眼看着好像并不难,但是把它能顺利写下来还是有几处细节要注意的,下面我们就来好好分析以下。看到这题第一眼我就想着用递归,因为最近想把递归的题好好练练,但是用非递归的方法更简单,我们先来说递归,因为递归会有很多细节。解法一:递归这个题的递归方法我一共提交了好几次,还是自己菜啊!第一次思路:第一次我就想法比较简

2020-10-16 16:06:15 96

原创 解析整型最大值(Integer.MAX_VALUE)溢出变为最小值(Integer.MIN_VALUE)

对于整型最大值(Integer.MAX_VALUE)溢出变为最小值(Integer.MIN_VALUE)的问题本篇博客主要介绍一下其中的原因。我们先来复习一下整型:整型所占4个字节它的取值范围是 -2^31 (Integer.MIN_VALUE)-> 2^31-1 (Integer.MAX_VALUE)Java中一个int变量占4个字节,和操作系统没用关系(跨平台)。查看Java中整形数据的范围:System.out.println(Integer.MAX_VALUE);//int的最

2020-10-13 22:46:40 5041 1

原创 Leetcode-138:复制带随机指针的链表(两种方法)

题目描述:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。思路:本题要求深拷贝给定的链表,并且给定链表的每个节点都带有随机指针域。节点的拷贝很

2020-10-11 17:55:30 199

原创 Map和Set 1

一、Map和Set介绍Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有:直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢二分查找,时间复杂度为,但搜索前必须要求序列是有序的上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,如果在查找时进行一些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,本节介绍的Map和Set是一种适合动态查找的集合容器。1、模型存储元素的类型:K-V模型(键值对)

2020-10-10 16:31:42 135 2

空空如也

空空如也

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

TA关注的人

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