自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构——二叉树的公共祖先问题

示例 2: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出: 5 解释: 节点 5 和节点 4 的最近公共祖先是节点 5。示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]所有节点的值都是唯一的。

2023-10-21 11:44:48 842

原创 数据结构——二叉树层序遍历

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历。层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入:root = [3,9,20,null,null,15,7]输入: [1,2,3,null,5,null,4]输出:[[15,7],[9,20],[3]]输出: [1,3,4]

2023-04-29 19:03:14 1033 1

原创 数据结构——求二叉树的属性

101. 对称二叉树对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,其实我们要比较的是两个树(这两个树是根节点的左右子树),所以在递归遍历的过程中,也是要同时遍历两棵树。要比较的是两个子树的里侧和外侧的元素是否相等本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。因为要遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中。递归函数参数为左子树结点和右子树结点,返回值为bool类型节点为

2023-04-25 18:11:13 714

原创 数据结构——二叉树的修改与构造

根据两个顺序构造一个唯一的二叉树,就是以后序数组的最后一个元素为切割点,将中序数组切分,根据中序数组分割情况,反过来在切后序数组。给定两个整数数组,preorder 和 postorder ,其中 preorder 是一个具有 无重复 值的二叉树的前序遍历,postorder 是同一棵树的后序遍历,重构并返回二叉树。中序数组已经切成了左中序数组和右中序数组了,那么。与106. 从中序与后序遍历序列构造二叉树思路相同,变为以前序数组的第一个元素为切割点,将中序数组切分,根据中序数组分割情况,切前序数组。

2023-04-20 21:51:31 523

原创 算法——双指针技巧总结

双指针技巧可细分分为两类,一类是**快慢指针**,一类是**左右指针**。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环、反转链表、找链表的中间节点、删除链表的倒数第 N 个结点;也用来解决数组中的问题,如移动/移除元素、删除有序数组中的重复项。后者主要解决数组(或者字符串)中的问题,比如二分查找,滑动窗口。

2023-04-19 15:13:03 2953

原创 数据结构中的“结点”和“节点”,到该底用哪个?

在学习数据结构中的链表和树时,我们会遇到“结点”的概念,而在一些书籍和网站中,对链表和树的介绍中使用了“节点”。那么,“节点”和“结点”到底有什么不同?在数据结构中到底该用哪个呢?英文node翻译过来是结点,node本身有“结”的意思。node/结点形象地表示了交结在一点的这个意思,结点符合数据结构中的实际结构。结点和节点都可以使用,没有严格规定(doge)。

2023-04-19 15:09:43 1863

原创 数据结构——B树和B+树

平衡二叉树或红黑树的查找效率最高,时间复杂度是O(nlogn)。但不适合用来做数据库的索引树。因为磁盘和内存读写速度有明显的差距,磁盘中存储的数据需要先读取到内存中才能进行高速的检索。而数据库当中存储着海量的数据,光是数据库索引就有可能占据几个GB甚至更大的空间。当我们要查找数据的时候,显然不可能把整个索引树读到内存中。因此,我们只能以索引树的节点为基本单元,每次把单一节点从磁盘读取到内存当中,进行后续操作。

2023-04-19 14:18:07 5194 1

原创 数据结构——二叉搜索树、平衡二叉树、红黑树

平衡二叉树是一种特殊的二叉搜索树,其中每一个节点的左子树和右子树的高度差至多等于1。也被称为AVL树。平衡二叉树可以在每次插入、删除节点后进行自平衡调整,重新达到平衡状态。二叉树上节点的左子树高度和右子树高度的差值称为平衡因子BF(Balance Factor),平衡二叉树上所有节点的平衡因子只可能是-1、0、1,才是保持高度平衡,否则就不平衡。红黑树和AVL树类似,也是为了维护二叉搜索树的平衡。红黑树判断树平衡的方式要复杂一些,通过红色和黑色两种节点以及若干规则来判断平衡。红黑树规则。

2023-04-14 14:03:16 959 1

原创 数据结构——哈希表相关题目

每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,且该数字不等于 pre ,将该数字添加到答案并更新 pre 变量,同时将两个指针都右移一位。可以不考虑输出结果的顺序。这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况,所以相对于题目18. 四数之和,题目15.三数之和,还是简单了不少。,对较短的数组进行哈希表的操作,哈希表的大小不会超过较短的数组的长度。

2023-04-11 16:44:46 788

原创 数据结构——栈与队列相关题目

232. 用栈实现队列使用栈实现队列的下列操作:说明:你只能使用标准的栈操作 – 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。在push数据的时候,只要数据

2023-04-10 16:05:31 672

原创 数据结构——链表相关题目

leetcode 203.移除链表元素删除链表中等于给定值 val 的所有节点,并返回新的头节点。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]删除非头节点让节点next指针直接指向下下一个节点移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前

2023-03-31 10:13:02 219

原创 数据结构——数组相关题目

使用双指针,

2023-03-30 21:22:04 141

原创 数据结构——哈希表

哈希表Hash table,国内也有一些算法书籍翻译为散列表)是根据关键码的值而直接进行访问的数据结构。每个是以键值对key-value形式存储其实数组就是一张哈希表。哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。

2023-03-27 20:47:40 448

原创 数据结构——二叉树

树是一种由结点组成的数据结构,在链表中,一个结点连接着另一个结点,树也是由许多的结点构成的,唯一的区别就是一个树结点可以连接多个树结点,**一颗树只有一个根结点**,根结点作为起源,由它展开一个树状的数据结构。在树中,每个结点都含有自己的数值,以及与之相连的子结点,**连接结点的线叫做相连线(edge)**。如下图所示,A是根结点(root),也是B和C的父结点(parent node),也就是说B、C都是A的子结点(child node)。同理,B是D和E的父结点,以此类推。

2023-03-08 16:26:47 166

原创 数据结构——栈与队列

栈是先进后出的数据结构,首先处理添加到队列中的最新元素。通常,插入操作在栈中被称作入栈 push。,总是在堆栈的末尾添加一个新元素。但是,删除操作,退栈 pop ,将始终删除队列中相对于它的最后一个元素。入栈(Push):将一个元素放入栈,用来加入数据。出栈(Pop):将一个元素弹出栈,用来删除数据。Peek:查看最顶部的元素。isEmpty:查看栈是否为空。队列是先进先出的数据结构,将首先处理添加到队列中的第一个元素。

2023-03-08 16:23:03 101

原创 算法——二分查找相关题目

leetcode 34.在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为O(log⁡n)O(\log n)O(logn)的算法解决此问题吗?

2022-10-03 21:26:10 198

原创 数据结构——数组与链表

数据结构——数组与链表一、数组理论基础二、链表理论基础1.链表分类1)单链表2)双链表3)循环链表4)块状链表2.链表的存储方式3.链表的定义4.链表的操作1)删除节点2)插入节点3)查找元素4)更新元素5.虚拟头节点的使用6.与数组的对比一、数组理论基础数组是存放在连续内存空间上的相同类型数据的集合。可以方便的通过下标索引的方式获取到下标下对应的数据。不能单独删除、释放数组中的某个元素,只能覆盖。如果要释放,就是全释放(程序运行结束,回收内存栈空间)。因为数组的在内存空间的地址是连续的,所以我们在

2022-04-30 17:21:57 2401

原创 算法——二分查找

算法——二分查找一、二分查找的框架二、基本二分查找的两种写法1.定义target在闭区间[left,right]2.定义target在左闭右开区间[left,right)三、寻找边界的二分查找1.寻找左侧边界的二分查找写法1写法22.寻找右侧边界的二分查找写法1写法2题目:leetcode704.二分查找leetcode35.搜索插入位置思路1.暴力解法2.二分法一、二分查找的框架使用条件:数组为有序数组数组中无重复元素(一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的)int bi

2022-04-06 20:08:57 650

原创 Java学习记录10——泛型

Java学习记录10——泛型一、泛型1.基本介绍二、自定义泛型三、泛型继承和通配符一、泛型1.基本介绍传统方法向集合中添加对象不能对加入到集合中的数据进行约束(不安全)。数据存入时要转成Object,遍历时需要进行类型转换(向下转型),如果集合中数据量较大,对效率有影响。因此引出泛型。语法:interface 接口名<T> {}或class 类名<k,v,…> {}T、K、V都代表类型一般在创建具体对象时将泛型实例化泛型又称参数化类型,是jdk5.0出现的新特性,解

2022-04-05 23:23:11 458

原创 Java学习记录9——集合

ArrayList类(集合类)集合是一种容器,与数组类似,不同的是集合的大小是不固定的。通过创建ArrayList的对象表示得到一个集合容器,同时ArrayList提供了比数组更好用、更丰富的API功能

2022-03-30 21:35:13 328

原创 JAVA学习记录8——常用类(2)

JAVA学习记录8——常用类(2)一、BigInteger和BigDecimal类1.应用场景2.常用方法二、日期类第一代日期类DateSimpleDateFormat第二代日期类Calendar类一、BigInteger和BigDecimal类1.应用场景BigInteger适合保存比较大的整形BigDecimal适合保存精度更高的浮点型//用字符串形式传入BigInteger bigInteger = new BigInteger("123345656788900087665");2.常

2022-03-24 16:45:05 365

原创 JAVA学习记录7——常用类(OBject类、包装类、String类、StringBuilder和StringBuffer)

JAVA学习记录4——一、String类1.String的不可变性2.创建字符串对象的两种方式3.字符串比较4.String常用API二、ArrayList类(集合类)一、String类1.String的不可变性String是字符串类型,可以定义字符串变量指向字符串对象。String创建的字符串对象不可改变," “方式给出的字符串对象,在堆中的字符串常量池中存储。每次修改其实是产生并指向了新的字符串对象,原对象没有改变eg:下面输出name为ABCD,但字符串常量池中存有"AB"和"CD”,nam

2022-03-17 20:29:47 582

原创 JAVA学习记录6——异常

JAVA学习记录6——异常一、异常的概念二、异常体系图三、常见的异常常见运行时异常:1.NullPointerException空指针异常2.ArithmeticException数学运算异常3.ArrayIndexOutOfBoundsException数组下标越界异常4.ClassCastException类型转换异常5.NumberFormatException数字格式不正确异常常见的编译异常四、异常处理一、异常的概念Java中程序执行发生的不正常情况称为异常(开发过程中的语法错误和逻辑错误不是异

2022-03-16 23:16:40 460

原创 JAVA学习记录5——枚举与注解

JAVA学习记录5——枚举与注解一、自定义类实现枚举二、enum关键字实现枚举注意事项enum常用方法三、JDK内置的基本注解类型四、元注解:对注解进行注解一、自定义类实现枚举特点:构造器私有化,防止外部创建对象在本类内部创建一组对象可提供get方法,不需要提供set方法,因为枚举对象通常为只读枚举对象公开public,对枚举对象/属性使用final+static共同修饰,实现底层优化枚举对象名通常使用全部大写,同常量的命名规范枚举对象根据需要,也可有多个属性public class

2022-03-03 22:44:58 254

原创 JAVA学习记录4——面向对象高级

JAVA学习记录4——面向对象高级一、类变量和类方法1.类变量(静态变量)1)类变量的存储2)与普通属性的区别2.类方法(静态方法)1)使用场景:2)与普通方法的区别二、深入理解main方法三、代码块1.代码块使用细节一、类变量和类方法1.类变量(静态变量)类变量最大的特点是会被所在类所有的对象实例共享,类变量可以通过类名访问(可以不创建对象实例)。类变量在类加载时就生成了,生命周期与所在类相同class A { public static int count = 0;}可以用A.count

2022-02-24 15:21:46 158

原创 JAVA学习记录3——面向对象

JAVA学习记录3——Java基础一、Java类与对象1.类与对象的使用2.对象的存储一、Java类与对象1.类与对象的使用声明对象:Cat cat;创建对象:cat = new Cat();new 类名() :创建对象public class Test { public static void main(String[] args) { Cat cat1 = new Cat(); //创建对象赋给实例cat1 }}class Cat { String nam

2022-02-17 22:27:34 332

原创 JAVA学习记录2——Java基础

JAVA学习记录2——1. Java基本类型有固定的范围和字段长度,不受操作系统影响,保证了Java程序的可移植性2. Java整形常量数值默认int型,声明long型常量在后面加l或L以区分3. Java浮点形常量数值**默认double型**,声明float型常量在后面加f或F以区分```float num = 1.1```错误。通常情况下使用double4. Java浮点型0.xxx中0可省略,表示为```.xxx``````123e2```表示123的2次方5. **浮点数=符号位+

2022-02-10 22:26:40 96

原创 Java学习记录1——初识Java

JAVA学习记录1——一、Java概述1.Java技术体系平台2.Java的重要特点3.Java虚拟机4.JDK与JRE环境变量的配置一、Java概述1.Java技术体系平台2.Java的重要特点面向对象(oop)健壮性(强类型机制、异常处理、垃圾自动回收)跨平台性(编写.java程序,编译成.class文件,通过JVM(Java virtual machine 虚拟机)可在不同操作系统下运行)解释型语言(编译后的代码不能直接被机器执行,需要解释器执行)C/C++编译性语言编译后的代码可

2022-02-03 22:50:17 358

原创 C++学习记录5——文件

C++学习记录6——文件文件操作1.文本文件1.写文件2.读文件2.二进制文件1.写文件2.读文件文件操作程序运行时产生的数据都属于临时数据,程序一旦运行结束就会被释放,通过文件可以使数据持久化。C++中对文件操作需要包含头文件<fstream>(文件流)文本文件:文件以文本的ASCII码形式存储在计算机中二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂文件操作主要分三大类:读操作:ofstream写操作:ifstream读写操作:fstream1.

2022-01-27 21:53:48 519

原创 C++学习记录4——继承和多态

C++学习记录5——继承和多态一、继承1.继承的基本语法2.继承方式3.继承中的对象模型4.继承中的构造和析构顺序5.继承中同名成员的处理方式6.继承同名静态成员的处理方式7.多继承语法8.菱形继承(钻石继承)二、多态1.多态基本概念==2.多态的底层原理==3.多态的优点与实例4.纯虚函数和抽象类5.虚析构和纯虚析构一、继承继承可减少代码重复,提高利用率1.继承的基本语法语法:class 子类:继承方式 父类子类也称派生类,父类也称基类派生类中的成员,一部分从基类继承(共性),一部分自己新增(

2022-01-26 22:30:06 533

原创 C++学习记录3——友元与运算符重载

C++学习记录3——一、友元1.全局函数做友元2.类做友元3.成员函数做友元一、友元程序中的一些私有属性,也想让类外的一些特殊的函数或类进行访问,友元的目的就是让函数或类访问另一个类内的私有成员。关键字friend友元的三种实现:1.全局函数做友元class Building{ //写在类的前端 friend void godgay(Building* building);public: Building() { m_sittingroom = "客厅"; m_bedroom

2022-01-25 22:28:40 736

原创 C++学习记录2——类和对象

C++学习记录2——类和对象一、类和对象1.类和对象概念2.类和对象的定义![在这里插入图片描述](https://img-blog.csdnimg.cn/ed948d10fe964a16a22a651d89279fa9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2K5qKm5Y2K6YaS5Y2K5rWu55SfOTEy,size_14,color_FFFFFF,t_70,g_se,x_16

2022-01-24 22:01:16 239

原创 C++学习记录1——C++基础

C++学习记录1——C++基本语法一、C++基本语法1.C++程序结构2.关于注释的补充二、C++数据类型一、C++基本语法1.C++程序结构#include <iostream>using namespace std; int main(){ cout << "Hello World"; cout << "Hello C++" << endl; int a; cin >> a; cout <&

2022-01-23 22:11:52 260

原创 C学习记录9——文件

C学习记录9——文件一、文件概述1.磁盘文件与设备文件2.磁盘文件的分类二、文件的打开和关闭1.文件指针2.文件打开3.文件关闭三、文件的顺序读写1.按字符读写文件fgetc()、fputc()2.文件格式化读写fprintf()、fscanf()一、文件概述1.磁盘文件与设备文件磁盘文件:一组相关数据的有序集合,通常存在外部介质上,使用时才调入内存。设备文件:在操作系统中把每个与主机相连的输入输出设备看作一个文件,把它们的输入、输出等同于对磁盘文件的读、写。2.磁盘文件的分类文本文件:基于字

2022-01-22 23:35:12 206

原创 C学习记录8——复合类型

C学习记录8——复合类型一、结构体1.结构体的定义与使用2.结构体数组3.结构体嵌套4.结构体赋值5.结构体指针二、共用体(联合体)三、枚举一、结构体1.结构体的定义与使用将不同类型数据组合成一个有机整体struct student //student为结构体类型名{ int num; char name[20]; char sex; int age; //成员列表}stu; //结构体变量名(可不写,之后在定义) //可stu = {……}(定义结构体同时赋值)stru

2022-01-21 22:24:30 449

原创 C学习记录7——内存管理

C学习记录7——内存管理一、静态变量1.静态(static)局部变量2.静态全局变量3.静态函数二、内存分区一、静态变量1.静态(static)局部变量作用域在定义函数内生命周期同程序运行周期(在数据区存储)值只能初始化一次,但可以赋值多次若未赋初值,则系统自动赋值(数值型0,字符型空字符)注意:不要返回局部变量的地址,因为运行后会释放,第一次可正确返回是因为编译器保留,第二次操作就会丢失2.静态全局变量作用域:只可在本文件中使用,不可在其他文件使用3.静态函数只可在本文件中使用,

2022-01-20 23:15:40 491

原创 C学习记录6——指针

C学习记录6——指针一、计算机存储简介1.内存2.物理存储器和存储地址空间一、计算机存储简介1.内存存储器:计算机组成中用来存储程序、数据,辅助CPU进行运算处理的重要部分内存:内部存储器,暂存程序/数据,断电丢失。一些内存:SRAM、DRAM、DDR、DDR4外存:外部存储器,长时间保存程序/数据。一些外存:ROM(只读存储器)、ERRROM、FLASH(快存)、硬盘、光盘内存是沟通CPU和硬盘的桥梁(暂存CPU中运算数据/与外存交换的数据)2.物理存储器和存储地址空间物理存储器:

2022-01-19 19:26:20 149

原创 文件读写标识补充

r代表read的简写,+代表可读可写,w代表write,b代表bit二进制位(b只在Windows中有效,Linux中r、rb相同),t代表textUnix、Linux中所有文本文件行都以\n结尾,Windows中所有文本文件行都是\r\n结尾在Windows下以文本形式打开文件不需要加b,读取时系统将\r\n转化为\n,写入时将\n转化为\r\n。以二进制形式打开文件时,读写都不会进行转化在Unix、Linux下文本与二进制模式无区别,\r\n作为俩个字符原样输入输出r 打开只读文件,该文件必

2022-01-18 22:14:35 182

原创 C学习记录5——函数

C学习记录5——函数一、函数概述1.函数分类2.作用3.函数调用二、函数的定义1.函数定义的一般格式三、函数的调用1.main()中2.无参函数的调用四、函数的声明五、main与exit函数六、多文件(分文件)编程一、函数概述1.函数分类系统函数(库函数)用户定义函数2.作用省去重复代码编写,降低重复率让程序更加模块化,利于阅读修改完善3.函数调用头文件、函数名、功能、参数、返回值eg:产生随机数导入头文件 <time.h>、 <stdlib.h>ti

2022-01-17 22:23:42 420

原创 C学习记录4——数组和字符串

C学习记录4——数组和字符串一、数组1.数组2.数组名与下标3.数组逆置二、二维数组1.定义形式三、多维数组四、字符数组和字符串1.定义字符数组2.字符串3.定义字符数组储存字符串4.拼接字符串5.字符串数组五、字符串的输入输出1.gets()2.fgets()3.puts()4.fputs()5.strlen()一、数组1.数组为方便处理数据把具有相同类型的若干变量按有序形式组织起来。有序形式:在内存中连续的相同类型的变量空间形式为:数据类型 数组名[元素个数]={值1,值2,……}int

2022-01-10 17:23:02 389

空空如也

空空如也

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

TA关注的人

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