自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 天猫高频编程考题:​K 个一组翻转链表 (困难)​

在翻转每一组的过程中,注意将前一组翻转后的最后一个节点连接到当前组翻转后的第一个节点上。个节点,我们将它们翻转。可以借助一个辅助函数来实现链表的一部分翻转。是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。:我们从头节点开始,遍历链表,找到每。额外内存空间的算法解决此问题吗?个节点作为一组需要翻转的部分。:如果最后剩余的节点数量不足。,则保持其原有顺序不动。

2024-10-04 10:11:57 113 1

原创 天猫高频编程考题:随机链表的复制(中等)

指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。要实现一个带有随机指针的链表的深拷贝,我们可以使用一个三步法来确保新链表节点的。:我们遍历原链表,对于每一个节点,我们创建一个新的节点,并将其插入到当前节点的。:最后,我们再一次遍历链表,将新节点从旧节点中分离出来形成新的链表。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。因为新节点紧随其原节点,所以新节点的。,该指针可以指向链表中的任何节点或空节点。

2024-10-04 10:11:19 382

原创 天猫高频编程考题:排序链表(中等)

归并排序适合链表的排序,因为它能在 O(1) 的空间复杂度下完成,而数组的归并排序需要额外的 O(n) 空间复杂度。要对链表进行排序,并且满足 O(n log n) 的时间复杂度,最合适的算法是。时间复杂度和常数级空间复杂度下,对链表进行排序吗?

2024-10-04 10:10:46 251

原创 天猫高频编程考题:合并 K 个升序链表 (困难)

对于每个节点的插入和删除操作,优先队列的时间复杂度为 O(log k),其中 k 是链表的数量。总的时间复杂度为 O(N log k),其中 N 是所有节点的总数。要将多个有序链表合并成一个有序链表,可以使用优先队列(最小堆)来实现,这样能够有效地将多个链表中的最小节点逐步合并,最终形成一个有序的链表。:空间复杂度主要取决于优先队列的存储空间,最坏情况下为 O(k)。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。将它们合并到一个有序链表中得到。

2024-10-04 10:10:09 326

原创 天猫高频编程考题:LRU 缓存(中等)

/ 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}lRUCache.put(4, 4);// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}// 缓存是 {1=1, 2=2}要实现一个满足 LRU (最近最少使用) 缓存约束的数据结构,可以使用。// 返回 -1 (未找到)lRUCache.get(1);// 返回 -1 (未找到)lRUCache.put(1, 1);// 缓存是 {1=1}lRUCache.get(1);

2024-10-04 10:09:38 297

原创 天猫高频编程考题:二叉树的中序遍历(简单)

要实现二叉树的中序遍历,最常见的方式是使用递归。递归算法很简单,你可以通过迭代算法完成吗?迭代方法使用栈来替代递归。给定一个二叉树的根节点。

2024-10-04 10:08:49 223

原创 天猫高频编程考题:二叉树的最大深度(简单)

是指从根节点到最远叶子节点的最长路径上的节点数。递归方法较为简洁直观。

2024-10-04 10:08:15 108

原创 天猫高频编程考题:翻转二叉树(简单)

所以空间复杂度是 O(n)。但对于平衡树,树的高度是 log(n),因此在平衡树的情况下,空间复杂度是 O(log n)。递归调用会消耗栈空间,栈的深度是树的高度。最坏情况下,树是链式结构(即退化为单边树),高度为。:翻转二叉树的操作是交换每个节点的左子树和右子树。这个操作从根节点开始,然后递归地进行到每个子节点。每个节点都需要访问一次以进行交换和递归操作。因此,时间复杂度是 O(n)。,翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。

2024-10-04 10:07:42 205

原创 天猫高频编程考题:对称二叉树(简单)

要检查一个二叉树是否是轴对称的,我们可以使用递归或迭代的方法。这里提供了两种方法的解题思路和复杂度分析。:可以使用队列来模拟递归检查过程,通过层次遍历来比较每层的节点对称性。:我们需要检查左右子树是否对称。你可以运用递归和迭代两种方法解决这个问题吗?给你一个二叉树的根节点。, 检查它是否轴对称。

2024-10-04 10:07:01 524

原创 天猫高频编程考题:二叉树的直径(简单)

要找到二叉树的直径,我们需要找到树中任意两个节点之间的最长路径。:直径是树中两个节点之间最长的路径长度。这个路径可能会经过树的根节点,也可能不会。3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。因此,整体的空间复杂度主要由递归栈的深度决定,对于最坏情况下是。:通过递归计算每个节点的左右子树的深度,返回节点的最大深度。这条路径可能经过也可能不经过根节点。是指树中任意两个节点之间最长路径的。给你一棵二叉树的根节点,返回该树的。由它们之间边数表示。

2024-10-04 10:06:21 123

原创 天猫高频编程考题:二叉树的层序遍历(中等)

层序遍历(二叉树的宽度优先遍历)可以使用队列(FIFO)来实现。我们逐层遍历树中的节点,每次处理一层的所有节点,并将它们的子节点加入队列中。(即逐层地,从左到右访问所有节点)。

2024-10-04 10:05:50 192

原创 天猫高频编程考题:将有序数组转换为二叉搜索树(简单)

要将一个升序排列的整数数组转换为一棵平衡二叉搜索树(BST),我们可以利用递归方法构建树。这是因为一个平衡的BST的中序遍历应该是升序排列的,因此我们可以通过递归的方式选择中间的元素作为根节点,递归构建左右子树,从而保持平衡。:由于数组已经是升序排列的,选择中间元素作为根节点可以保证树的高度平衡。[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。排列,请你将其转换为一棵 平衡 二叉搜索树。

2024-10-04 10:05:11 225

原创 天猫高频编程考题:验证二叉搜索树(中等)

根节点的值是 5 ,但是右子节点的值是 4。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。

2024-10-04 10:03:07 205

原创 天猫高频编程考题:二叉搜索树中第 K 小的元素(中等)

小元素,我们可以利用 BST 的中序遍历特性。中序遍历 BST 会以升序方式访问所有节点,因此第。:中序遍历 BST 的结果是一个升序排列的节点值列表。可以使用递归或迭代的方式进行中序遍历。:在遍历过程中,维护一个计数器来记录已经遍历的节点数量,当计数器等于。如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第。要查找二叉搜索树(BST)中的第。小的元素就是中序遍历结果中的第。小的元素(从 1 开始计数)。给定一个二叉搜索树的根节点。小的值,你将如何优化算法?时,返回当前节点的值。

2024-10-04 10:02:28 231

原创 天猫高频编程考题:二叉树的右视图(中等)

要从二叉树的右侧查看并返回节点值,我们可以使用层序遍历(广度优先遍历)来实现。具体来说,我们需要从右侧依次访问每一层的节点,并从每一层的最右侧节点开始返回结果。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

2024-10-04 10:01:56 258

原创 天猫高频编程考题:两两交换链表中的节点(中等)

要实现两两交换链表中的相邻节点,可以使用迭代的方法,借助指针操作来完成节点的交换。这里我们不修改节点的值,只通过调整节点之间的连接顺序来达到目的。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。:为了方便处理链表头节点的特殊情况,我们可以创建一个虚拟头节点。来指向要交换的节点及其前驱节点;

2024-10-03 22:43:06 90

原创 天猫高频编程考题:删除链表的倒数第 N 个结点(中等)

具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。要删除链表中的倒数第 n 个节点,进阶要求使用一趟扫描来实现。可以使用双指针法(快慢指针)来完成这个任务。:如果删除的是头节点,需要特别处理,直接返回。指针正好停在要删除的节点的前一个节点上。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。你能尝试使用一趟扫描实现吗?指针,跳过需要删除的节点。,都指向链表的头节点。

2024-10-03 22:42:35 241

原创 天猫高频编程考题:两数相加(中等)

要将两个逆序存储的链表表示的非负整数相加,并返回一个新的链表表示它们的和,可以逐位相加,处理进位问题。每一位的加法要考虑两个链表当前节点的值以及前一位的进位。:遍历两个链表,直到所有节点都处理完;你可以假设除了数字 0 之外,这两个数都不会以 0 开头。不为 0,则需要在结果链表末尾添加一个新节点表示进位。的链表,表示两个非负的整数。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。将计算出的节点值添加到结果链表中。计算当前位的和以及新的进位 (,即结果链表的头节点。

2024-10-03 22:42:00 249

原创 天猫高频编程考题:合并两个有序链表(简单)

具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。指向合并后的链表的头节点。新链表是通过拼接给定的两个链表的所有节点组成的。法来逐个比较两个链表的节点,然后将较小的节点添加到结果链表中。:当一个链表遍历完后,将另一个链表的剩余部分直接连接到。要将两个升序链表合并为一个新的升序链表,我们可以使用。的当前节点值,将较小的那个节点添加到。将两个升序链表合并为一个新的。,这是合并后链表的头节点。,并移动相应链表的指针;

2024-10-03 22:41:25 175

原创 天猫高频编程考题:环形链表 II(中等)

快指针每次移动两个节点,慢指针每次移动一个节点。如果链表中存在环,那么快慢指针会在环中相遇。:当快慢指针相遇时,将慢指针移回链表的头部,同时保持快指针在相遇点,二者都以相同的速度(每次移动一个节点)继续移动。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。),并在此基础上进一步寻找环的起始节点。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。,返回链表开始入环的第一个节点。要找出链表中环的起始节点,可以使用。,则在该链表中没有环。

2024-10-03 22:40:53 286

原创 天猫高频编程考题:环形链表(简单)

具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。来表示链表尾连接到链表中的位置(索引从 0 开始)。判断链表中是否有环,可以使用一种高效的算法,即。如果链表中有某个节点,可以通过连续跟踪。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。仅仅是为了标识链表的实际情况。,判断链表中是否有环。给你一个链表的头节点。

2024-10-03 22:40:19 230

原创 天猫高频编程考题:回文链表(简单)

使用快慢指针方法,快指针每次移动两个节点,慢指针每次移动一个节点。当快指针到达链表末尾时,慢指针正好处于链表的中间节点。: 从中间节点开始,反转链表的后半部分。这一步可以用来比较链表的前半部分和反转后的后半部分。: 为了保持链表的原始结构,可以在比较完成后再次反转链表的后半部分,恢复链表的结构。: 比较链表的前半部分和反转后的后半部分。如果它们相同,那么链表是回文的。,请你判断该链表是否为回文链表。给你一个单链表的头节点。空间复杂度解决此题?

2024-10-03 22:39:45 167

原创 天猫高频编程考题:反转链表(简单)

具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。反转单链表是一道经典的链表操作题目。可以使用两种主要的方法来实现:迭代和递归。链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?,请你反转链表,并返回反转后的链表。1. 迭代方法复杂度。

2024-10-03 22:39:09 299

原创 天猫高频编程考题:相交链表(简单)

请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。,函数返回结果后,链表必须。

2024-10-03 22:38:33 784

原创 天猫高频编程考题:搜索二维矩阵 II(中等)

为了高效地搜索一个具有特定性质的矩阵中的目标值,我们可以利用矩阵的排序特性来设计一个时间复杂度为 O(m+n)O(m + n)O(m+n) 的算法:从矩阵的右上角或左下角开始搜索,并根据当前元素与目标值的比较结果决定搜索的方向。:由于每列的元素是升序的,目标值在当前列的上方,因此我们可以向左移动;:由于每行的元素是升序的,目标值在当前行的下方,因此我们可以向下移动;超出矩阵的边界时,说明目标值不在矩阵中,返回。为 0(矩阵的行数 - 1),为 0(矩阵的列数 - 1)。:从矩阵的右上角开始。

2024-10-03 22:38:02 324

原创 天猫高频编程考题:旋转图像(中等)

原矩阵中的 matrix[col][n−row−1] 就被覆盖了!当我们知道了如何原地旋转矩阵之后,还有一个重要的问题在于:我们应该枚举哪些位置 (row,col) 进行上述的原地交换操作呢?题目中要求我们尝试在不使用额外内存空间的情况下进行矩阵的旋转,也就是说,我们需要「原地旋转」这个矩阵。那么 matrix[col][n−row−1] 经过旋转操作之后会到哪个位置呢?我们再重复一次之前的操作,matrix[n−row−1][n−col−1] 经过旋转操作之后会到哪个位置呢?使用另一个矩阵来旋转图像。

2024-10-03 22:37:26 510

原创 天猫高频编程考题:螺旋矩阵(中等)

具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。,它们分别代表当前矩阵的上下左右边界。初始值分别为矩阵的四个边界。:每完成一个方向的遍历后,更新相应的边界值,缩小螺旋矩阵的范围。,返回矩阵中的所有元素。

2024-10-03 22:36:50 255

原创 天猫高频编程考题:矩阵置零 (中等)

具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。:根据步骤 1 中记录的标志,处理第一行和第一列。如果第一行或第一列需要被置为。:遍历矩阵中除了第一行和第一列之外的所有元素。这两部分特殊处理,因为它们将用作标记其他行和列的状态。:首先检查矩阵的第一行和第一列是否包含。,则将其所在行和列的所有元素都设为。,则将其所在的行和列的首位置为。的行和列中的所有元素设置为。:遍历矩阵,将那些被标记为。的矩阵,如果一个元素为。

2024-10-03 22:36:12 338

原创 天猫高频编程考题:缺失的第一个正数 (困难)

具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。:首先,遍历数组,将所有小于等于0或大于数组长度。,因为这些元素不影响我们寻找缺失的最小正整数。,请你找出其中没有出现的最小的正整数。并且只使用常数级别额外空间的解决方案。范围 [1,2] 中的数字都在数组中。1 在数组中,但 2 没有。给你一个未排序的整数数组。最小的正数 1 没有出现。请你实现时间复杂度为。

2024-10-03 22:35:37 178

原创 天猫高频编程考题:除自身以外数组的乘积 (中等)

具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。要解决这个问题并且避免使用除法,我们可以利用前缀乘积和后缀乘积来计算每个位置的结果。这种方法能够在 O(n) 时间复杂度内完成计算,且空间复杂度为 O(1),不考虑输出数组的额外空间。的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组。之中任意元素的全部前缀元素和后缀的乘积都在。之外其余各元素的乘积。时间复杂度内完成此题。

2024-10-03 22:35:02 322

原创 天猫高频编程考题:两数之和

我们只需遍历数组一次,对于数组中的每个元素,哈希表的查找和插入操作的时间复杂度都是 O(1),因此总的时间复杂度为 O(n)。在最坏的情况下(没有两个元素的和为目标值),我们需要在哈希表中存储数组中所有的元素及其下标,因此空间复杂度为 O(n)。我们可以通过一次遍历数组的方式解决该问题。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。

2024-10-02 22:22:54 310

原创 天猫高频编程考题:字母异位词分组 (中等)

要将字母异位词组合在一起,我们可以利用哈希表(HashMap)的特性。:O(n * k)。需要使用额外的空间来存储排序后的字符串,以及存储结果的哈希表。哈希表最多需要 O(n * k) 的空间,其中。具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。是由重新排列源单词的所有字母得到的一个新单词。是字符串数组的长度,是字符串的平均长度。是字符串数组的长度,是字符串的平均长度。

2024-10-02 22:22:00 343

原创 天猫高频编程考题:最长连续序列 (中等)

要在未排序的整数数组中找出最长的连续序列,并且时间复杂度要求为 O(n),可以采用哈希集(HashSet)来进行优化。具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。需要一个哈希集来存储数组中的所有元素,最坏情况下需要 O(n) 的额外空间。每个数字最多只会被访问一次,因此时间复杂度为 O(n),其中。在哈希集中插入和查找的操作时间复杂度都是 O(1)。,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

2024-10-02 22:21:28 277

原创 天猫高频编程考题:移动零 (简单)

数组中的每个元素最多被遍历两次(一次在第一次遍历时移动非零元素,另一次在填充零时),因此时间复杂度为 O(n)。具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。到数组末尾,同时保持非零元素的相对顺序,我们可以使用双指针技术来实现。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。只使用了常数级别的额外空间,即指针。为了在不复制数组的情况下原地移动所有。,因此空间复杂度为 O(1)。

2024-10-02 22:20:43 119

原创 天猫高频编程考题:盛最多水的容器 (中等)

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。这个问题可以通过使用双指针的方式来解决。在双指针法中,每一步只移动一个指针,一共需要遍历整个数组一次,因此时间复杂度为 O(n)。只使用了固定的额外空间来存储指针和最大面积,因此空间复杂度为 O(1)。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。

2024-10-02 22:20:04 399

原创 天猫高频编程考题: 三数之和 (中等)

不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。要在数组中找出所有和为 0 且不重复的三元组,可以采用排序+双指针的方法。唯一可能的三元组和为 0。

2024-10-02 22:19:32 329

原创 天猫高频编程考题:接雨水 (困难)

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。只使用了固定的额外空间来存储指针和变量,因此空间复杂度为 O(1)。为了计算在柱子之间能够接住多少雨水,可以使用双指针的方法。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。指针相遇时,遍历结束,所有的雨水量已经计算完毕。位置的柱子可能会接住雨水,接住的水量取决于。,以便在接下来的计算中使用。用于记录接住的总雨水量。,则能接住雨水,并将。位置能接住的雨水量。

2024-10-02 22:18:54 387

原创 天猫高频编程考题:无重复字符的最长子串 (中等)

为了解决这个问题,可以使用滑动窗口的技术。滑动窗口可以动态地维护一个子串,并且当发现子串中有重复字符时,可以调整窗口的起始位置,从而找到不含重复字符的最长子串。使用了一个哈希集来存储当前窗口内的字符,最坏情况下需要存储所有字符,因此空间复杂度与字符集大小。:每次更新窗口后,记录当前窗口的长度,并与已知的最大长度进行比较,保留较大的值。指针右移,缩小窗口,直到窗口内没有重复字符为止。因此,总的时间复杂度为 O(n),其中。中时,说明出现了重复字符,这时需要将。,请你找出其中不含有重复字符的。

2024-10-02 22:18:19 259

原创 天猫高频编程考题:找到字符串中所有字母异位词 (中等)

起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。滑动窗口每次移动都需要比较两个频率表,这一步是 O(1) 的操作,因此整个算法的时间复杂度为 O(n)。,但它们的大小是固定的(26个字母),所以空间复杂度为 O(1)。

2024-10-02 22:17:33 414

原创 天猫高频编程考题:和为 K 的子数组 (中等)

具体可参考:https://zyfcodes.blog.csdn.net/article/details/141401712。我们只遍历一次数组,每次操作的时间复杂度是 O(1),因此总的时间复杂度是 O(n)。前缀和的基本思想是通过累积数组元素的和,可以快速计算出任意子数组的和。要解决这个问题,我们可以使用前缀和(Prefix Sum)以及哈希表来优化查找和为。个不同的前缀和,因此空间复杂度是 O(n)。在最坏的情况下,哈希表。子数组是数组中元素的连续非空序列。

2024-10-02 22:16:54 344

空空如也

空空如也

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

TA关注的人

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