
数据结构
文章平均质量分 79
数据结构学习笔记及相关面试题
笨笨在努力
总要热爱点儿什么
展开
-
二叉树——(四)进阶面试题
105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode) (leetcode-cn.com)重建二叉树_牛客题霸_牛客网 (nowcoder.com)class Solution { int index; public TreeNode buildTree(int[] preorder, int[] inorder) { return buildTreeHelper(preorder,inorder,0,preorder.length); }原创 2022-03-31 17:42:35 · 1225 阅读 · 10 评论 -
二叉树——(三)基础题解
判断一颗二叉树是否是平衡二叉树。OJ链接原创 2022-03-27 16:56:56 · 699 阅读 · 1 评论 -
堆和优先级队列
【前言】堆有很多种存储方式,二叉堆是其中一种,下面我们所说的堆均默认为二叉堆,即基于二叉树的堆1.堆1.1堆的特点首先堆在逻辑上是一棵完全二叉树 其次,一般物理上用顺序表(数组)来存储 根据堆节点间大小关系的不同,堆又分为大根堆和小根堆两种大根堆:也叫最大堆,堆中根节点值一定>=子树节点值小根堆:也叫最小堆,堆中根节点值一定<=子树节点值【注意】节点的大小关系与所处层次无关,不能肯定的说低层次的节点值一定比高层次的节点值大或小。如下图,是一个小根堆,满足任意一个根节点原创 2022-03-22 13:42:23 · 1529 阅读 · 3 评论 -
七大排序算法大汇总(下)快排详解
1.基本快排1.1递归1.2非递归2.快排优化问题之——数据近乎有序2.1分区点随机2.2分区点三数取中3.快排优化问题之——重复元素过多3.1二路快排3.2三路快排4.快排性能分析原创 2022-03-20 16:56:24 · 1201 阅读 · 2 评论 -
七大排序算法大汇总(上)
【前言】排序的稳定性:稳定性:两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法是具备稳定性的排序算法。如下面这个例子,未排序前,5(a)是在5(b)前面的,因为5=5,所以如果排序后5(a)仍然是在5(b)前面,保证了相等的数排完序之后的相对位置仍然未变,我们就说这种排序是稳定的那么,为什么有时候需要保证稳定性呢,来看一个典型的现实例子:某商城订单默认是按时间顺序排列,现需要按照订单金额大小从小到大排序,而对于金额大小一样的订单,排序后保证其时间顺序.原创 2022-03-19 20:17:51 · 1145 阅读 · 1 评论 -
哈希表(HashMap)的学习与实现
1.哈希表的起源?首先我们来分析一下从一组数据中查找某个元素的效率:如果顺序查找,则需要从头开始查找,时间复杂度为O(N);即使用刚学的BST进行查找,时间复杂度也为O(log N)原创 2022-03-15 16:55:42 · 1902 阅读 · 4 评论 -
Map集合与Set集合
【前言】Map集合与Set集合都是专门用来进行搜索的容器或者数据结构(尤其适合动态查找,什么是动态查找呢,就是可能在查找时进行插入、删除的操作,如生活中的根据姓名查找考试成绩)一、Map集合1.官方文档:首先值得注意的就是,Map并没有继承自Collection接口,而是独立的一块数据结构; Map是一个接口类,该类中存储的是<K,V>结构的键值对,并且K一定是唯一的,不能重复; Map接口下有两个普通子类,HashMap和TreeMap,其中,HashMap就是我们通常所原创 2022-03-14 17:12:22 · 1049 阅读 · 18 评论 -
BST内部方法的实现
(1)自定义输出按照先序遍历的顺序输出; 唯一不同的是,这里为便于更好的根据输出结果还原二叉树,我们引入用 “--” 连接的分隔符以示节点所在层次,下一层的高度比上一层的“--”长;如下图,左侧结果即为右图BST的输出形式代码实现// 按先序遍历顺序输出各节点的值 public String toString(){ StringBuilder s = new StringBuilder(); generateString(root...原创 2022-03-13 22:37:25 · 771 阅读 · 26 评论 -
二叉树——(二)四种遍历(递归 & 迭代 都要掌握)
一、递归篇先序遍历中序遍历后序遍历二、迭代篇层序遍历先中后序遍历的迭代做法原创 2022-03-12 21:45:26 · 154 阅读 · 0 评论 -
二叉树——(一)概念篇
啊啊啊啊前两周刚开学又准备考试,时隔n天,终于重返csdn了。结果就是,好多内容都还没来得及整理,从今天开始,补起!!!😅目录一、什么是二叉树二、 满二叉树 与 完全二叉树🌴🌴🌴满二叉树🌱🌱🌱完全二叉树😅😅😅完全二叉树有关节点个数的面试题三、二叉树的存储方式一、什么是二叉树上一篇中,已经隐隐提到了二叉树:假若一棵树结点最大的度为2,则可称该树为二叉树,也就是说,二叉树的节点的度都<=2如下面这个图,就是一个二叉树:【ps】对于空树,以...原创 2022-03-12 16:12:26 · 1422 阅读 · 0 评论 -
树形结构概述
目录????为什么有树形结构?????树?非树?????常用的树形结构:????关于树形的基础概念????为什么有树形结构?1.树形结构是天然的查找,利用树形结构可进行高效的查找与搜索,比线性查找效率高得多,如电脑中的文件系统,就是树形,逐级逐层的查找文件2.一般,树形结构查找搜索操作的时间复杂度为 O(log n),n为树的深度????树?非树?树形结构它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的树:子树不相交; 除了根结点以外,每个结点有原创 2022-02-19 17:26:23 · 3127 阅读 · 7 评论 -
时间复杂度 & 空间复杂度
【前言】时间复杂度主要衡量的是一个算法的运行速度 空间复杂度主要衡量一个算法所需要的额外空间在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。目录????????????时间复杂度????????????空间复杂度????????️????????️????????️题目练习????????????时间复杂度1.算法中的基本操作的原创 2022-02-12 22:46:08 · 795 阅读 · 13 评论 -
Java实现顺序表、链表结构
目录顺序表定义:实现方法:代码实现:链表定义:分类:实现方法:代码实现:顺序表 & 链表前言:线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串。顺序表定义:用一段物理地址连续的存储单元依次存储数据元素的线性结构(逻辑上连续,物理上也连续)(1)静态顺序表:使用定长数组存储。(2)动态顺序表:使用动态开辟的数组存储【原创 2022-02-10 19:04:35 · 780 阅读 · 19 评论 -
用Java实现基本计算器
双栈Leetcode_T227 基本计算器||227. 基本计算器 II - 力扣(LeetCode) (leetcode-cn.com)队列单调队列:Leetcode_T239原创 2022-02-09 19:45:50 · 776 阅读 · 15 评论 -
栈、单调栈 题解合集
4.有关栈的基本解题(1)Leetcode第20题-有效的括号20. 有效的括号 - 力扣(LeetCode) (leetcode-cn.com)给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。(2)Leetcode第155题-最小栈155. 最小栈 - 力扣(LeetCode) (leetcode-cn.com)设计一个支持 push ,po.原创 2022-02-08 10:56:26 · 931 阅读 · 15 评论 -
栈与队列(Java实现)
栈Stack1.定义:栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则实际应用:常见的诸如撤销操作,网页后退操作,以及开发中程序的“调用栈”操作系统栈底层2.三个常用方法:push方法——入栈pop方法——出栈,即将栈顶元素删除并返该元素peek方法——返回栈顶元素3.实现基于数组的顺序栈为什么选用数组呢,其实链表也可原创 2022-01-27 11:44:51 · 1834 阅读 · 4 评论 -
浅析集合框架
前言:Java 集合框架Java Collection Framework,又被称为容器container ,是定义在 java.util 包下的一组接口interfaces和其实现类classes。其主要是将多个元素置于一个单元中,用于对这些元素进行快速、便捷存储store、检索retrieve、管理manipulate,即平时我们俗称的增删查改CRUD我们这里主要讲集合框架中List、Queue、Map、Set的主要用法前提须知:这些集合类都只能存储类的对象,所以对于基本数据类型,我们要用集原创 2022-01-23 17:54:58 · 646 阅读 · 9 评论 -
单链表的那些些面试必刷题
1.反转链表(Leetcode206题,剑指Offer24题)(1)题目描述:给你单链表的头节点head,请你反转链表,并返回反转后的链表。(2)解法:该题的解法可以有多种,以下解法——原地移动法为自己最喜欢的一种(因为理解起来很简单)(3)代码如下:package linked_list;public class aaaaaa { public ListNode reverseList(ListNode head){// 如果给定链表为空或者只有一个节点,则..原创 2021-12-22 15:38:38 · 451 阅读 · 0 评论 -
Leetcode第237题——删除链表中的节点
1.题目描述:请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点2.题目解读:此题与以往删除节点有所不同,以前删除节点我们一般是找到待删除节点的前一个节点,让前一个节点直接指向待删除节点的下一个即可,而这道题我们没办法从头节点遍历找到前一个节点。但题目中给到保证了待删除节点不是末尾节点,没办法从前节点解决,我们只能从后节点解决,我们发现,删除后节点是比较容易的原创 2021-12-30 21:31:23 · 433 阅读 · 0 评论 -
反转链表||(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]...原创 2021-12-29 20:38:02 · 711 阅读 · 0 评论 -
链表节点的移动
1.题目描述:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL2.题目解读:(1)首先,当链表节点数小于3时,直接返回原创 2022-01-01 14:42:49 · 962 阅读 · 0 评论