- 博客(29)
- 收藏
- 关注
原创 二叉树-03
空间复杂度:O(h),其中 h 为树的高度,递归调用的时候会占用栈空间,最坏情况下与树的高度相关。空间复杂度:O(h),其中 h 为树的高度,递归调用的时候会占用栈空间,最坏情况下栈空间的使用与树的高度相关。时间复杂度:O(n),其中 n 为树的节点数,因为在最坏情况下,需要遍历两棵树的所有节点进行比较。时间复杂度:O(n),其中 n 为树的节点数,因为在最坏情况下,需要遍历两棵树的所有节点进行比较。空间复杂度:O(h),其中 h 为树的高度,递归调用的时候会占用栈空间,最坏情况下与树的高度相关。
2024-03-01 23:20:09
979
1
原创 MySQL--索引结构
MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种:上述是MySQL中所支持的所有的索引结构,下面展示不同的存储引擎对于索引结构的支持情况。注意: 我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。
2024-02-24 23:33:29
1566
1
原创 Mysql--索引分类
而B语句需要先查询name字段的二级索引,然后再查询聚集索引,也就是需要进行回表查询。②. 由于查询返回的数据是*,所以此时,还需要根据主键值10,到聚集索引中查找10对应的记录,最终找到10对应的行row。在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。回表查询: 这种先到二级索引中查找数据,找到主键值,然后再到聚集索引中根据主键值,获取。接下来,我们来分析一下,当我们执行如下的SQL语句时,具体的查找过程是什么样子的。数据的方式,就称之为回表查询。
2024-02-24 23:32:54
911
原创 二叉树-02
此时,路径的数目为 O(N),并且每一条路径的节点个数也为 O(N),因此要将这些路径全部添加进答案中,时间复杂度为 O(N。空间复杂度主要取决于递归调用的栈空间,递归栈的深度等于二叉树的高度,最坏情况下,二叉树的高度等于节点个数,空间复杂度为O(n)。空间复杂度主要取决于哈希表和队列空间的开销,哈希表需要存储除根节点外的每个节点的父节点,队列中的元素个数不会超过树的节点数。由于我们使用递归来实现深度优先遍历,因此空间复杂度的消耗主要在栈空间,取决于二叉树的高度,最坏情况下二叉树的高度为 O(n)。
2024-02-23 22:16:32
869
原创 二叉树-01
空间复杂度主要取决于递归时栈空间的开销,最坏情况下,树呈现链状,空间复杂度为 O(N)。平均情况下树的高度与节点数的对数正相关,空间复杂度为 O(logN)。空间复杂度主要取决于递归时栈空间的开销,最坏情况下,树呈现链状,空间复杂度为 O(N)。平均情况下树的高度与节点数的对数正相关,空间复杂度为 O(logN)。空间复杂度:O(N),其中 N 是树的节点数。空间复杂度:O(N),其中 N 是树的节点数。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。对每个节点访问一次。
2024-02-22 23:38:03
702
原创 链表-04
时间复杂度:O(N),其中 N 是链表的长度。通过上述两个步骤,我们实际上达到了删除指定节点的目的,因为我们将指定节点的值和指针都修改成了它后面节点的值和指针,从而绕过了指定节点,实现了删除操作。这个问题的关键在于我们无法访问要删除的节点的前一个节点,但我们可以将要删除节点的值替换为它后面节点的值,然后删除它后面的节点。给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字。链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。
2024-02-21 11:33:31
860
原创 链表-03
使用快慢指针的方法,其中一个指针每次移动两步,另一个指针每次移动一步,当快指针到达链表末尾时,慢指针会指向链表的中间节点。接下来,重新定义一个指针 head,指向链表的头节点。然后,通过一个循环,让 head 指针和 slow 指针以相同的速度向前移动,当它们再次相遇时,即为环的入口节点。具体做法是,遍历原始链表的前半部分和反转后的链表,并依次交替连接节点,直至完成链表的重排。整体思路是先找到中间节点,然后将链表分成两部分,反转后半部分链表,最后合并前半部分和反转后的后半部分链表,实现链表的重排操作。
2024-02-21 09:52:29
803
原创 链表 -02
开始反转操作:遍历需要反转的区间(共 right - left + 1 个节点),每次将当前节点指向前一个节点,更新 pre、curr 和 nxt 指针。反转完成后,调整指针连接关系:将反转部分的尾节点的 next 指针指向下一个待反转区间的头结点,将 p0 的 next 指针指向反转部分的头节点。反转完成后,调整指针连接关系:将反转部分的头结点的 next 指针指向未反转部分的头结点,将 p0 的 next 指针指向反转部分的尾节点。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
2024-02-19 17:01:54
1125
原创 链表-01
这种方法利用了迭代的特性,每次将当前节点的下一个节点保存起来,然后将当前节点的 next 指针指向前面已经翻转好的链表,最后将 prev 和 curr 指针向后移动,直到遍历完整个链表。例如,原始链表为 1->2->3->4->5,翻转后的链表为 5->4->3->2->1。这种方法利用了递归的特性,每次都选择较小节点进行合并,直到一个链表为空,然后将另一个非空链表直接连接到已合并的链表的末尾。这种方法利用了链表的特性,顺序处理两个链表对应位置的数字,并考虑进位的情况,最终得到表示两数相加结果的新链表。
2024-02-18 23:58:42
1033
原创 二分算法02
假设有一个长度为 n 的数组 candies,表示每个糖果的数量。我们需要找到一个最大的正整数 x,使得将每个糖果分成 x 份后,每个孩子都可以得到至少一份,并且可以得到最大总糖果数。另给你一个长度为 n 的整数数组 dist ,其中 dist[i] 表示第 i 趟列车的行驶距离(单位是千米)。假设有一个长度为 n 的数组 dist,表示一系列区间的距离,以及一个代表旅行所需总时间的浮点数 hour。另给你一个整数 k。这种方法利用了二分查找的特性,不断缩小搜索范围,最终得到符合要求的最大的正整数 x。
2024-02-18 23:58:20
1173
1
原创 素数算法(普通求解,埃氏筛,欧拉筛)
如果遍历完所有可能的因数,都没有找到可以整除n的数,则n是素数,返回True。然后,我们遍历2到n的每个数i,在遍历过程中利用已知的素数列表primes来标记每个数的最小质因数。具体来说,对于一个待判断的数n,我们可以从2开始依次尝试将n除以小于等于n的开方的所有数,如果存在一个因子能够整除n,则n不是素数;因此,通过遍历素数的倍数并将其标记为非素数,我们可以排除一大批非素数,从而筛选出素数。遍历素数列表primes中的每个素数p,如果i * p <= n,将is_prime[i * p]置为False。
2024-02-16 22:30:53
1138
1
原创 二分算法01
设查找范围的初始左边界 left 为 0, 初始右边界 right 为 n−1,其中 n 为数组 citations 的长度。给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列。h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)至少 有 h 篇论文分别被引用了至少 h 次。在本题给定的数据范围的限制下,C 不会超过 10^6。
2024-02-16 22:30:05
1047
1
原创 MySQL进阶学习--day03
1. 介绍2. 演示2.1 无索引2.2 有索引3. 特点索引是一种对数据库表中的一列或多列进行排序的数据结构,它们可以大大加快数据的检索速度。索引类似于书中的目录,它使数据库系统能够更快地找到需要访问的数据行。索引可以通过在表的一列或多列上创建,以加快对这些列的查询和排序操作。它们是数据库性能优化的重要手段之一。索引有多种类型,包括:主键索引:用于唯一标识表中的每一行数据,通常会自动创建在主键列上,保证数据的唯一性和快速查找。唯一索引:要求列中的数据是唯一的,但允许有空值。
2023-12-21 15:20:41
945
原创 动态规划02-斐波那契类型二
如果数组中仍然有多个值为 x 的元素,由于所有等于 x-1 或 x+1 的元素已经被删除,我们可以直接删除 x 并获得其点数。我们假设爬到当前下标 i 的耗费为dp[i](不包括当前 i 位置的消费),由题意可知,每次可以爬一个或两个台阶,那么我们就可以得出以下的动态转移方程:dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2])。注意到当 i≥2 时,dp[i]只和 dp[i−1] 与 dp[i−2]有关,因此可以使用滚动数组的思想,将空间复杂度优化到 O(1)。
2023-12-21 15:19:59
1093
原创 动态规划01-斐波那契类型一
我们不妨就用两个变量p,q分别为0,1,然后对于第n个数来说,我们循环n-1次,然后里面分别将p,q赋值为q,p+q。思路:这题的思路跟上题的斐波那契数列的思路是一样的,都能得到以下递推关系:F(n)=F(n−1)+F(n−2),唯一的不同就是关于边界值的问题,斐波那契的前两个数的值是0,1,而爬楼梯的前两个数的值是1,2。当 n>1 时,每一项的和都等于前两项的和,因此有如下递推关系:F(n)=F(n−1)+F(n−2)泰波那契数的边界条件是 T(0)=0,T(1)=1,T(2)=1。
2023-12-08 14:32:38
2712
1
原创 MySQL进阶学习--day02
1. InnoDB1.1 介绍1.2 特点1.3 文件1.4 逻辑存储结构2. MyISAM2.1 介绍2.2 特点2.3 文件3. Memory3.1 介绍3.2 特点3.3 文件4. 区别及特点5. 存储引擎选择6. InnoDB引擎与MyISAM引擎的区别?上篇文章我们介绍了什么是存储引擎,以及如何在建表时如何指定存储引擎,接下来我们就来介绍下来上面重点提到的三种存储引擎 InnoDB、MyISAM、Memory的特点。
2023-12-08 14:31:18
2230
1
原创 MySQL--存储引擎
存储引擎是MySQL数据库的核心,我们需要在合适的场景使用合适的存储引擎,接下来就来介绍一下存储引擎。存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。
2023-12-07 14:54:42
1004
1
原创 final关键字详解与final,finally,finalize的区别
final 用于定义常量、禁止重写或继承,是一种修饰符。finally 用于异常处理,确保代码块中的内容得到执行,无论是否有异常抛出。finalize 是一个方法,用于对象在被垃圾回收前的清理,但不再推荐使用。
2023-12-06 15:22:32
5908
2
原创 从0开始刷算法题(leetcode数组篇)-- day04
我们从后往前遍历,当出现nums[i]<nums[i+1]时,nums[i]即为较小数,而此时nums[i+1]以及它以后的数字都是降序排序的,接下来我们再从后往前遍历,找到第一个nums[j]>nums[i],此时nums[j]即为较大数,此时直接交换nums[i]和nums[j],由于nums[i+1]之后的数字都是降序的,因此我们直接通过双指针交换首尾的值,即可实现降序操作。而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。
2023-12-06 15:21:06
6108
1
原创 从0开始刷算法题(leetcode数组篇)-- day03
思路:我们初始化最后一个数字的下标为end,那么如果在跳跃的过程中如何出现当前位置能跳的最远距离比end远,是不是就意味着可以到达最后一个下标了,这个的主要解题方法就是在跳跃的过程中记录当前位置所能跳跃的最远距离,之后与之前记录的最大值比较,取两者中的最大值,然后只要出现大于等于end的情况就返回True,如果在跳跃的过程发现能跳的最远的距离小于等于当前的下标的话,就返回False。优化一:我们的数组是已经排好序的,因此当nums[i]+nums[i+1]+nums[i+2]都大于0时,可以直接跳出。
2023-12-05 09:42:54
7909
原创 抽象类与接口详解
抽象类使用 abstract 关键字来进行声明。// ...抽象类可以包含属性、方法和构造函数,但不能被实例化。接口使用 interface 关键字进行声明。在上面的例子中,Shape 接口定义了 calculateArea() 和 calculatePerimeter() 两个抽象方法。
2023-12-05 09:42:12
8422
原创 java中重写与重载的区别
重载:在同一个类中定义多个具有相同名称但参数列表不同的方法,以实现更灵活的方法调用方式。重写:子类重新定义父类中的方法,要求方法名称、参数列表和返回类型完全相同,以改变方法的实现和行为。
2023-12-01 14:39:03
9275
1
原创 从0开始刷算法题(leetcode数组篇)-- day02
思路:初始化当前表示连续字符的数量cnt为1,然后从第二个字符(下标为1的字符)开始遍历字符串,如果遇到与上一个字符相同的字符则将cnt加1,否则重置cnt为1,同时与之前存的最大连续字符数量进行比较一下就可以了。注意,我们在最后循环结束后也需要判断一次插入空间是否被插入,因为如果循环的最后一个区间也与插入区间有并集的话,不进行判断就会导致少插一个区间。空间复杂度:除了用于输出的空间以外,额外使用的空间为常数,因此空间复杂度是O(1)的。空间复杂度:只使用了额外的两个变量,因此空间复杂度为O(1).
2023-12-01 14:38:15
9079
1
原创 从0开始刷算法题(leetcode数组篇)-- day01
数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
2023-11-30 09:22:17
9901
原创 java中Object类的常用方法
总之,notify()方法是Java中用于线程间通信的重要方法之一,但需要注意的是,notify()方法只会唤醒等待在当前对象上的一个线程。另外,对于数组对象而言,getClass()方法返回的是描述数组类型的Class对象,而不是数组中元素的类型的Class对象。在Java中,如果两个对象的equals()方法返回true,则它们的哈希码必须相等,即hashCode()方法返回的值相等。需要注意的是,notifyAll()方法会唤醒所有等待在当前对象上的线程,包括已经获取了锁但是还没有执行的线程。
2023-11-30 09:21:01
11260
原创 java中的==和equals详解
equals方法主要用来比较对象的内容是否相同,它不能用于基本数据类型的比较,只能用于引用数据类型。equals()方法是java的Object类下的一个方法,同时也是Object类最常用的方法之一。==主要用来比较变量的值是否相同。
2023-11-20 18:09:45
6925
1
原创 快速幂算法+leetcode原题讲解
顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
2023-11-14 10:15:28
5808
1
原创 Python--字符串常用操作
字符串常用操作1.拼接字符串2.计算字符串的长度3.截取字符串4.分隔字符串5.检索字符串6.字母的大小写转换7.去除字符串中的空格和特殊字符8.格式化字符串1.拼接字符串•使用“+”运算符可完成对多个字符串的拼接,“+”运算符可以连接多个字符串并产生一个字符串对象。wx1="Fate let us meet again,this time i will not let go"wx2="缘分让我们重新相遇,这次我不会放手"print(wx1+'--'+wx2)#Fate let us mee
2021-09-24 18:01:42
12066
原创 python处理时间的time库
这里写目录标题time库时间获取时间格式化程序计时time库1.time库的定义•time是python中处理时间的标准库。2.time库的使用•时间获取---------time() ,ctime() ,gmtime()•时间格式化---------strftime() ,strptime()•程序计时----------sleep() ,perf_counter()时间获取1.time.time()用于获取当前的时间戳。每个时间戳都以自从1970年1月1日午夜(历元)
2021-09-14 20:45:22
12174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人