数据结构
小漫cool
测试小白,初入职场,在测试领域还有很多东西要学习,会在博客上记录日常工作中自己的思考或看法,欢迎大家一起来交流,只有学习,才能永远进步
展开
-
【Java—直接插入排序、选择排序】完整代码及性能分析
七大排序——直接插入排序直接插入排序类似于打扑克牌时拿到一张牌,将这张牌插入到手里已经排好序的牌中。即每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入。例如一个无序数组 10 6 3 1 8数组下标: 0 1 2 3 4对这组数据进行排序,我们从无序区间中取一个元素即就是从下标1开始,记为 i,需要与有序区间比较,即取下标为0,记为 j,定义了两个循环,每次i++;j–;每次 i 值确定后设置一个tmp变量来存放 i原创 2021-06-24 20:02:40 · 151 阅读 · 1 评论 -
【查找链表的倒数第k个节点-剑指offer-22】
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5用一次遍历实现,定义两个指针,第一个指针A从链表的头节点开始先走k-1步,第二个节点B在头节点不动,当A走到头节点的第k-1步时,A原创 2021-05-31 17:13:28 · 157 阅读 · 1 评论 -
【删除链表的节点—剑指offer—面试题18】
题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动(原题和改动后均有)示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那原创 2021-05-27 13:42:53 · 97 阅读 · 0 评论 -
【剑指0ffer—面试题10】—斐波那契数列(递归和动态规划)
题目:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。leetcode题目:答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。两种解法:①递归解法,因为斐波那契数就是由之前的两原创 2021-05-25 09:43:11 · 135 阅读 · 5 评论 -
一棵完全二叉树第六层有9个叶子结点(根为第一层),则结点个数最多有(109个)
一棵完全二叉树第六层有9个叶子结点(根为第一层),则结点个数最多有(109个)根据二叉树的性质如图:可知,第六层的结点数最多有为2^(6-1) = 32个,现在有9个叶子节点,所以还剩32-9 = 23 个结点拥有左右子树,所以第七层为23*2 = 46个结点。根据另一个性质:算出前六层最多有2^6 -1 = 63总结点数为:63+46 = 109。...原创 2021-05-15 11:21:41 · 4977 阅读 · 5 评论 -
牛客-排序子序列
排序子序列牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2输入描述:输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。输出描原创 2021-04-13 17:38:48 · 136 阅读 · 0 评论 -
Java—实现一个顺序表
Java—实现一个顺序表1.顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。静态顺序表适用于确定知道需要存多少数据的场景.静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用.相比之下动态顺序表更灵活, 根据需要动态的分配空间大小.2.实现一个顺序表首先定义顺序表的属性和构造方法:顺序表的底层是一个数组,所以需要一个数组和一个原创 2021-04-01 00:56:19 · 551 阅读 · 0 评论 -
实现一个哈希表--解决哈希冲突(开散列法或者链地址法)
少点思原创 2021-03-20 10:54:46 · 477 阅读 · 7 评论 -
已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行____次探测。
已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行____次探测。解析:假设在上一次探测的基础上,每进行一次二次探测都能直接找到对应的位置。第一个:直接找到位置,入坑,1次;第二个:和第一个同hash,找到的位置被第一个给占了,通过二次探测直接找到下一个,入坑,2次;第三个:第一个被占了,第二个也被占了,通过二次探测直接找到第三个,入坑,3次;。。。第n个:n次;一共:(1+n)*n / 2 次注意:二次探测属于开放地址法,开放地址法(原创 2021-03-15 23:52:02 · 1614 阅读 · 0 评论 -
下列各排序法中,最坏情况下的时间复杂度最低的是(**C** )A.希尔排序 B.快速排序 C.堆排序 D.冒泡排序
下列各排序法中,最坏情况下的时间复杂度最低的是(C )希尔排序A.快速排序B.堆排序C.冒泡排序D.正确答案:C题目解析:堆排序最坏情况时间下的时间复杂度为 O(nlog2n) ;希尔排序最坏情况时间下的时间复杂度为 O(n1.5) ;快速排序、冒泡排序最坏情况时间下的时间复杂度为 O(n2) 。故本题答案为 C 选项。...原创 2021-02-03 01:02:58 · 6308 阅读 · 1 评论 -
617. 合并二叉树
合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 2 .原创 2021-01-31 02:21:17 · 119 阅读 · 0 评论 -
LeetCode102题:二叉树的层序遍历
二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]/** * Definition for a binary tree node. * public class TreeNode { * int va.原创 2021-01-30 20:36:07 · 69 阅读 · 0 评论 -
LeetCode110题:给定一个二叉树,判断它是否是高度平衡的二叉树(两种方法求解)时间复杂度分别为0(n)、0(n²)
平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node..原创 2021-01-30 18:57:42 · 179 阅读 · 0 评论 -
LeetCode101题:判断一个树是否是对称二叉树
对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3代码:/** * Definition for a binary tree node. * public class TreeNode { * .原创 2021-01-30 02:31:34 · 136 阅读 · 0 评论 -
Leetcode572题:判断一个树是否是另一个树的子树
另一个树的子树给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。示例 2:给定的树 s: 3 / \ 4 5 / \.原创 2021-01-30 01:58:07 · 258 阅读 · 0 评论 -
LeetCode100:判断两棵树是否相同。
相同的树给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 .原创 2021-01-30 00:49:26 · 130 阅读 · 0 评论 -
二叉树的基本操作(代码示例及测试类代码及运行截图)
二叉树的基本操作// 前序遍历void preOrderTraversal(Node root);// 中序遍历void inOrderTraversal(Node root);// 后序遍历void postOrderTraversal(Node root);// 遍历思路-求结点个数static int size = 0;void getSize1(Node root);// 子问题思路-求结点个数int getSize2(Node root);// 遍历思路-求叶子结点个数s原创 2021-01-28 00:21:48 · 2173 阅读 · 0 评论 -
二叉树的三种遍历方式-前序遍历,中序遍历,后序遍历
二叉树的遍历所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题(比如:打印节点内容、节点内容加1)。 遍历是二叉树上最重要的操作之一,是二叉树上进行其它运算之基础。在遍历二叉树时,如果没有进行某种约定,每个人都按照自己的方式遍历,得出的结果就比较混乱,如果按照某种规则进行约定,则每个人对于同一棵树的遍历结果肯定是相同的。如果N代表根节点,L代表根节点的左子树,R代表根节点的右子树,则根据遍历根节点的先后次序有以下遍历方式原创 2021-01-26 20:35:11 · 1706 阅读 · 0 评论 -
将一棵二叉树的根结点放入队列,然后递归的执行如下操作,将出队结点所有子结点加入队。以上操作可以实现哪种遍历?
将一棵二叉树的根结点放入队列,然后递归的执行如下操作,将出队结点所有子结点加入队。以上操作可以实现哪种遍历?A.前序遍历B.中序遍历C.后序遍历D.层序遍历答案解析:D根节点出队,子结点入队,则队列中恰好为第一层的所有节点,将第一层节点依次出队,子结点入队,队列中为第二层所有节点,以此类推为层序遍历...原创 2021-01-26 00:06:24 · 949 阅读 · 0 评论 -
设非空二叉树的所有子树中,其左子树上的结点值均小于根结点值,而右子树上的结点值均不小于根结点值,则称该二叉树为排序二叉树。对排序二叉树的遍历结果为有序序列的是
3.设非空二叉树的所有子树中,其左子树上的结点值均小于根结点值,而右子树上的结点值均不小于根结点值,则称该二叉树为排序二叉树。对排序二叉树的遍历结果为有序序列的是A.中序序列B.前序序列C.后序序列D.前序序列或后序序列答案解析:正确答案 : A 解析:【解析】前序遍历:访问根结点在访问左子树和访问右子树之前。即先访问根结点,然后遍历左子树,最后遍历右子树;并且在遍历左子树和右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。中序遍历:访问根结点在访问左子树和访问右子树两者之间。即先原创 2021-01-25 23:59:43 · 2633 阅读 · 0 评论 -
2.将一颗有 100 个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根节点编号为 1 ,则编号为 98 的节点的父节点编号为
2.将一颗有 100 个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根节点编号为 1 ,则编号为 98 的节点的父节点编号为A.47B.48C.49D.50答案解析:C完全二叉树对于偶数节点其父节点编号为其编号除以2,奇数节点其父节点编号为(其编号-1)/298为偶数,其父节点编号为98/2=49...原创 2021-01-25 23:53:17 · 9554 阅读 · 0 评论 -
n个节点的二叉树,最多可以有多少层? D
1.n个节点的二叉树,最多可以有多少层?A.n/2B.log(n)C.n-1D.n答案解析:D假设从根节点开始,根节点的层数为1,每一层一个节点,则有n层。原创 2021-01-25 23:24:20 · 3466 阅读 · 1 评论 -
可以把List<String>传递给一个接受List<Object>参数的方法 不可以
可以把List传递给一个接受List参数的方法吗?A.正确B.错误解析,错X 原始类型可以引用一个参数化类型的对象,编译报告警告,例如, Collection c = new Vector<String>();//原来的方法接受一个集合参数,新的类型也要能传进去 参数化类型不考虑类型参数的继承关系: Vector<String> v = new Vector<Object>(); //错误!///不写<Obj原创 2021-01-22 02:20:38 · 2142 阅读 · 0 评论 -
下列在Java语言中关于数据类型和包装类的说法,正确的是(B)
下列在Java语言中关于数据类型和包装类的说法,正确的是()A.基本(简单)数据类型是包装类的简写形式,可以用包装类替代基本(简单)数据类型B. long和double都占了64位(64bit)的存储空间。C.默认的整数数据类型是int,默认的浮点数据类型是float。D.和包装类一样,基本(简单)数据类型声明的变量中也具有静态方法,用来完成进制转化等解析:BA,X 包装和基本类型不是同一个概念B,1、整数类型byte(1个字节)short(2个字节)int(4个字节)long(8个字节)原创 2021-01-22 02:15:30 · 1792 阅读 · 3 评论 -
ArrayList和LinkList的描述,下面说法错误的是?
ArrayList和LinkList的描述,下面说法错误的是?A.LinkedeList和ArrayList都实现了List接口B.ArrayList是可改变大小的数组,而LinkedList是双向链接串列C.LinkedList不支持高效的随机元素访问D.在LinkedList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在ArrayList的中间插入或删除一个元素的开销是固定的解析:D选项正好说反,Arraylist的内存结构是数组,当超出数组大小时创建一个新的数组,吧原数原创 2021-01-22 02:12:13 · 3982 阅读 · 1 评论 -
2021-01-22List,Set,Map都继承自继承Collection接口?
判断对错。List,Set,Map都继承自继承Collection接口。A.对B.错错X解析:List和Set是继承自Collection接口的接口,Set不允许重复的项目,List允许重复项目,Set接口派生的类有TreeSet,HashSet,LinkedHashSet。 List接口派生的类有ArrayList,Vector等。 Map是独立的接口,不继承Collection接口。...原创 2021-01-22 01:54:17 · 3882 阅读 · 0 评论 -
Java中的集合类包括ArrayList、LinkedList、HashMap等,下列关于集合类描述错误的是(C)
Java中的集合类包括ArrayList、LinkedList、HashMap等,下列关于集合类描述错误的是(C)A.ArrayList和LinkedList均实现了List接口B.ArrayList的访问速度比LinkedList快C.随机添加和删除元素时,ArrayList的表现更佳D.HashMap实现Map接口,它允许任何类型的键和值对象答案解析:A.ArrayList和LinkedList都实现List接口,Hashset实现Set接口BC.Arraylist在内存中基于数组实现.原创 2021-01-22 01:38:54 · 12009 阅读 · 4 评论