自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LCR 149. 彩灯装饰记录 I

的二叉树,节点值为该位置装饰彩灯的颜色编号。的顺序返回每一层彩灯编号。一棵圣诞树记作根节点为。

2024-04-30 18:02:08 378

原创 Leetcode98_验证二叉搜索树

2.在遍历过程中,比较当前节点的值与前一个节点的值,如果当前节点的值小于等于前一个节点的值,则不满足二叉搜索树的条件。3.如果遍历结束,且没有发现任何不满足条件的情况,那么该二叉树就是一个二叉搜索树。使用中序遍历二叉搜索树的结果应当是一个有序的升序序列。根节点的值是 5 ,但是右子节点的值是 4。1.使用递归或者迭代的方式进行中序遍历二叉树。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。

2024-04-29 21:14:49 479

原创 Leetcode226_翻转二叉树

翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。

2024-04-28 22:50:27 257

原创 Leetcode297_二叉树的序列化与反序列化

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。使用层次遍历进行序列化和反序列化。

2024-04-27 19:49:47 399

原创 Leetcode662_二叉树最大宽度

被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的。最大宽度出现在树的第 4 层,宽度为 7 (6,null,null,null,null,null,7)。思路:存储二叉树的下标,每个节点下标为 N,左子树结点为 2 * N,右子树下标为 2 * N+1。最大宽度出现在树的第 3 层,宽度为 4 (5,3,null,9)。最大宽度出现在树的第 2 层,宽度为 2 (3,2)。然后进行层次遍历,每次比较最大宽度值。

2024-04-26 23:30:00 966

原创 Leetcode104_二叉树的最大深度

是指从根节点到最远叶子节点的最长路径上的节点数。思路:递归求出左子树和右子树的最大深度。思路跟层序遍历差不多。

2024-04-25 23:30:00 150

原创 Leetcode102_二叉树的层序遍历

二叉树的层序遍历是一种广度优先搜索的算法,通过逐层访问二叉树的节点来遍历整个二叉树。3.2如果该节点有左子节点,则将左子节点入队。3.3如果该节点有右子节点,则将右子节点入队。(即逐层地,从左到右访问所有节点)。1.创建一个队列,用于存储待访问的节点。3.1出队一个节点,并将其值存储起来。4.返回存储节点值的结果列表。

2024-04-24 23:30:00 566

原创 Leetcode145_二叉树的后序遍历

二叉树的后序遍历是指先遍历左子树,再遍历右子树,最后访问根节点的顺序。首先创建一个两个空栈(一个用于保存结果),将根节点入栈。递归算法很简单,你可以通过迭代算法完成吗?a. 弹出栈顶节点,并将其加入到结果栈中。b. 先将左子节点入栈(如果存在)。c. 再将右子节点入栈(如果存在)。给你一棵二叉树的根节点。

2024-04-23 15:07:41 701

原创 Leetcode94_二叉树的中序遍历

4.如果当前节点为空,说明已经到达左子树的最下层,需要弹出栈顶节点并将指针指向弹出节点的 右子树。3.如果当前节点不为空,将当前节点入栈,并将指针指向当前节点的左子树。二叉树的中序遍历是指先遍历左子树,然后访问根节点,最后遍历右子树。5.重复步骤3和步骤4,直到栈为空且当前节点为空,表示遍历结束。2.当栈不为空或者当前节点不为空时,执行循环操作。递归算法很简单,你可以通过迭代算法完成吗?给定一个二叉树的根节点。

2024-04-22 20:03:11 644

原创 Leetcode144_二叉树的前序遍历

二叉树的先序遍历是指先访问根节点,然后按照先序遍历的方式访问左子树,最后再按照先序遍历的方式访问右子树。可以使用递归或者栈来实现二叉树的先序遍历。递归算法很简单,你可以通过迭代算法完成吗?a. 弹出栈顶节点,并将其值加入结果列表。b. 先将右子节点入栈(如果存在)。c. 再将左子节点入栈(如果存在)。首先创建一个空栈,将根节点入栈。

2024-04-21 23:30:00 342

原创 Leetcode141_环形链表

慢指针一次走一步,快指针一次走两步,如果在移动的过程中,慢指针反过来追上快指针,就说明该链表为环形链表。否则快指针将到达链表尾部,该链表不为环形链表。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。来表示链表尾连接到链表中的位置(索引从 0 开始)。如果链表中有某个节点,可以通过连续跟踪。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。仅仅是为了标识链表的实际情况。(即,常量)内存解决此问题吗?,判断链表中是否有环。给你一个链表的头节点。

2024-04-20 23:30:00 561

原创 Leetcode287_寻找重复数

把 nums 看成是顺序存储的链表,nums 中每个元素的值是下一个链表节点的地址,如果 nums 有重复值,说明链表存在环,本问题就转化为了找链表中环的入口节点,因此可以用快慢指针解决。慢指针总路程 = 环外 0 到入口 + 环内入口到相遇点 (可能还有 + 环内 m 圈)d) 重新定义两个指针,让 before,after 分别指向链表开始节点,相遇节点。所以,从环外 0 开始,和从相遇点开始,走同样多的步数之后,一定可以在。所以第二阶段的相遇点,就是环的入口,也就是重复的元素。你设计的解决方案必须。

2024-04-19 23:30:00 621

原创 Leetcode138_随机链表的复制

2.设置拷贝节点的random,即拷贝节点的random指向原节点的random的next,如 A.random=C,即NA.random=A.random.next=NC;1.对应指针A->B->C来说,直接把拷贝节点放到原节点的下一个节点,如:A->NA->B->NB->C->NC;指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。,该指针可以指向链表中的任何节点或空节点。返回复制链表的头节点。

2024-04-18 23:30:00 993

原创 Leetcode86_分隔链表

思路:定义两个链表small和big,遍历链表,小于x值放到small链表中,大于等于x值放到big链表中,最后small的尾节点连接big的头节点。两个分区中每个节点的初始相对位置。,请你对链表进行分隔,使得所有。给你一个链表的头节点。

2024-04-17 23:30:00 353

原创 Leetcode234_回文链表

1.找到链表的中间节点(使用快慢指针,遍历链表,slow 一次走一步,fast 一次走两步。那么当 fast 到达链表的末尾时,slow 就位于中间位置)给你一个单链表的头节点。,请你判断该链表是否为。空间复杂度解决此题?2.反转后半部分链表。

2024-04-16 23:30:00 596

原创 Leetcode876_链表的中间结点

使用快慢指针,遍历链表,slow 一次走一步,fast 一次走两步。那么当 fast 到达链表的末尾时,slow 就位于中间位置。该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。如果有两个中间结点,则返回第二个中间结点。,请你找出并返回链表的中间结点。链表只有一个中间结点,值为 3。

2024-04-15 20:56:54 494

原创 Leetcode215_数组中的第K个最大元素

在分区的过程当中,我们会对子数组进行划分,如果需要的下标正好就是划分得到的位置(q[0]和q[1]之间) ,就直接返回;如果 q 比目标下标小,就递归右子区间,否则递归左子区间。这样就可以把原来递归两个区间变成只递归一个区间。请注意,你需要找的是数组排序后的第。次删除操作后堆顶元素就是要找的答案。你必须设计并实现时间复杂度为。个最大的元素,而不是第。

2024-04-14 23:16:57 868

原创 排序算法-基数排序

【代码】排序算法-基数排序。

2024-04-13 23:45:00 128

原创 排序算法-桶排序

桶排序是一种基于计数的排序算法,它的核心思想是将待排序的元素分到不同的桶中,然后对每个桶中的元素进行排序,最后将所有桶中的元素依次取出来就得到了有序的结果。

2024-04-12 22:04:17 296

原创 Leetcode110_平衡二叉树

自底向上地遍历节点进行判断。计算每个节点的高度时,需要递归地处理左右子树;所以可以先判断左右子树是否平衡,计算出左右子树的高度,再判断当前节点是否平衡。这样,计算高度的方法height,对于每个节点就只调用一次了。从根节点开始,自顶向下递归地判断左右子树是否平衡,先分别计算当前节点左右子树的高度,如果高度差不超过1,那么再递归地分别判断左右子树。给定一个二叉树,判断它是否是。

2024-04-11 23:52:20 842

原创 Leetcode283_移动零

移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。类似快速排序partition过程。,编写一个函数将所有。

2024-04-10 23:30:00 524

原创 Leetcode75_颜色分类

对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。必须在不使用库内置的 sort 函数的情况下解决这个问题。给定一个包含红色、白色和蓝色、共。类似快速排序partition过程。分别表示红色、白色和蓝色。

2024-04-09 23:30:00 849

原创 Leetcode56_合并区间

注意:排序后不会出现三个相邻区间,第一个和第三个能合并,第一个和第二个 或 第二个和第三个不能合并的情况,所有能够合并的区间都必然是连续的。2.1 如果结果List没数据 或者 当前数组的左边界比结果List最后一个区间的右边界大,不能合并,直接添加到结果数组。2.2 否则可以合并,合并后的右边界取当前结果LIst最后一个区间的右边界和当前区间的右边界的最大值。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

2024-04-08 22:24:05 542

原创 排序算法-计数排序

计数排序是一种非比较排序算法,它的核心思想是将待排序的元素按照出现的次数进行统计,然后再按照统计结果进行排序。

2024-04-07 23:30:00 77

原创 排序算法-堆排序

堆是完全二叉树:除了最底层的叶节点外,其他层都是满的,并且最底层的叶节点都尽量靠左排列。堆中每个节点的值都大于等于或小于等于其子节点的值,这取决于堆的类型。根据这一性质,可以将堆分为最大堆和最小堆。最大堆:每个节点的值都大于等于其子节点的值,即父节点的值大于等于子节点的值。最小堆:每个节点的值都小于等于其子节点的值,即父节点的值小于等于子节点的值。父节点:(i-1)/2;左孩子2*i+1;右孩子:2*i+2;

2024-04-06 23:30:00 719

原创 Leetcode-交易逆序对的总数

交易中的逆序对为 (9, 7), (9, 5), (9, 4), (9, 6), (7, 5), (7, 4), (7, 6), (5, 4)。在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。在进行merge过程中,如果右边排好序数组的数小于左边排好序数组的数,右边数组当前数p2产生的逆序对为p1到mid的数量。注意:如果record[p1]=record[p2],优先放入record[p1]到 help[i++]中。思路:使用归并排序解决。

2024-04-05 23:30:00 505

原创 排序算法-希尔排序

希尔排序是插入排序的一种改进版本,通过将整个序列按一定间隔分组,对每个分组进行插入排序,然后逐渐减小间隔,直到间隔为1,最后对整个序列进行一次插入排序。希尔排序的核心思想是利用插入排序对近乎有序的序列进行排序,以提高插入排序的效率。

2024-04-04 22:33:54 540

原创 排序算法-插入排序

插入排序:将一个元素依次插入到已经排好序的序列中。

2024-04-03 00:01:53 305

原创 排序算法-冒泡排序

通过比较和交换相邻元素的方式,将较大的元素逐渐“冒泡”到数组的末尾。

2024-04-02 23:30:46 489

原创 排序算法-选择排序

思路:第一次从 arr[0]~arr[n-1]中选取最小值,与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2]交换,...,第 i 次从 arr[i-1]~arr[n-1]中选取最小值,与 arr[i-1]交换,..., 第 n-1 次从 arr[n-2]~arr[n-1]中选取最小值,选择排序:遍历数组,找到最小值,放到arr[0],遍历剩下的数组,找到最小值放到arr[1],以此类推。

2024-04-01 22:27:05 355

原创 排序算法-快速排序

快速排序:随机选一个基准数据,通过一趟排序将待排序的记录分割成独立的三部分,第一部分记录的数组小于基准数据,第二部分记录的数组等于基准数据,第三部分记录的数组大于基准数据,过程执行完,基准数据已经在数组中的正确位置,递归地进行这个过程,直到整个序列有序为止。2.1 如果arr[i]<num,arr[i]和<区的下一个数据交换,<区右移一位,i++;2.3 如果arr[i]>num,arr[i]和>区的前一个数据交换,>区左移一位,i不变。2.随机再数组中选一个基准数据num,遍历数组arr[i];

2024-03-31 23:40:54 928

原创 排序算法-归并排序

3.2 从头开始判断两个数组中的数谁大谁小,小的放入help数组中,指针向后移动,直到有一个数组的所有数都放入了help数组中,然后直接把另一个数组的剩下数放入到help数组中去。将两个已经有序的子序列合并成一个有序序列,比如最后一次合并要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8]归并:将原始数组划分为若干个子数组,然后将这些子数组分别排序,最后再将已排序的子数组合并成一个有序的数组。

2024-03-30 23:25:47 612

原创 Leetcode704_二分查找

9 出现在 nums中并且下标为 4。2 不存在 nums中因此返回 -1。,如果目标值存在返回下标,否则返回。个元素有序的(升序)整型数组。

2024-03-29 23:30:38 343 1

原创 Leetcode9_回文数

3.2当x为奇数时,如果x==reverNum/10,说明是回文数(例:x=12321,循环结束,x=12,reverNum=123,reverNum/10=12)1.2 如果x是回文数的话,最后一位数不能是0(因为最后一位是0,第一位数字也得是0,x=0除外)2.定义一个反转数,当x>reverNum,reverNum=reverNum*10 +x%10。3.1 当x为偶数时,如果x==reverNum,说明是回文数。是指正序(从左向右)和倒序(从右向左)读都是一样的整数。1.判断两种特殊情况。

2024-03-28 23:41:35 404 1

原创 Leetcode239_滑动窗口最大值

2.定义两个数组进行左右扫描,从左向右扫描每个块中的最大值,从右到左扫描每个块中的最小值。的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。3.每个窗口的最大值就是max(right[i],left[j])滑动窗口的位置 最大值。1.将数组按照K个元素分块,即每个块中有K个元素。滑动窗口每次只向右移动一位。

2024-03-27 23:57:03 421 1

原创 Leetcode20_有效的括号

2.1 特殊情况:如果字符串上来就是右括号,直接返回false(例s='}')2.2 基本情况:判断当前右括号与栈顶元素是否一样(出栈看是否匹配)1.遍历字符串,如果是左括号,直接将对应的右括号入栈。3.如果栈为空,说明全部匹配,若不为空,说明不匹配。,判断字符串是否有效。

2024-03-26 18:14:38 657

原创 Leetcode232_用栈实现队列

思路:出队时反转,定义两个栈,入栈时都放入stack1中,出栈时都出stack2的元素, 当stack2为空时,把stack1的所有元素都出栈,再放入到stack2中。stack2中的元素一定是先进先出。请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(

2024-03-25 13:51:16 612

原创 学会HashMap源码,一篇就够了

哈希(Hash)也称散列,是一种算法,用于将任意长度的输入映射为固定长度的输出,这个映射规则就是对应的Hash算法,而映射后的二进制串就是哈希值。哈希冲突指的是在哈希函数计算过程中,不同的输入却产生相同的哈希值的情况。由于哈希函数的输出空间相对输入空间要小,哈希冲突是不可避免的。解决哈希冲突的方法有以下几种常见的策略:1.链地址法:在哈希表的每个位置上维护一个链表,当发生哈希冲突时,将冲突的元素加入链表中。

2024-03-24 23:55:15 1812 1

原创 Leetcode225_用队列实现栈

思路:当一个新的元素x入栈时,让它直接入队queue,它会添加在队尾。然后接下来,只要将之前的所有数据依次出队、再重新入队添加进queue,就自然让x移动到队首了。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(myStack.empty();// 返回 False。你能否仅用一个队列来实现栈。

2024-03-23 23:45:00 431 1

原创 Leetcode48_旋转图像

旋转图像,这意味着你需要直接修改输入的二维矩阵。请你将图像顺时针旋转 90 度。使用另一个矩阵来旋转图像。

2024-03-22 19:44:45 130 1

空空如也

空空如也

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

TA关注的人

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