![](https://img-blog.csdnimg.cn/4b2569b29edd4fdcb136697ddb0a616b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 66
数据结构习题及学习笔记
小七mod
脚踏实地,仰望星空
展开
-
【数据结构】史上最好理解的红黑树讲解,让你彻底搞懂红黑树
狂肝半个月的学习笔记,最通俗易懂的红黑树讲解。带你快速掌握红黑树~原创 2022-01-18 08:59:00 · 191688 阅读 · 68 评论 -
【LeetCode】螺旋矩阵 [M](数组)
LeetCode 54:给定一个长方形矩阵matrix,实现转圈打印。采用模拟求解。原创 2023-03-07 10:55:41 · 348 阅读 · 0 评论 -
【LeetCode】旋转图像 [M](数组)
LeetCode 48:给定一个正方形矩阵matrix,原地调整成顺时针90度转动的样子。原创 2023-03-07 10:53:00 · 294 阅读 · 0 评论 -
【LeetCode】每日温度 [M](单调栈)
LeetCode 739:给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0 来代替。采用单调栈求解。原创 2023-02-23 15:58:41 · 123 阅读 · 0 评论 -
【LeetCode】和为 K 的子数组 [M](数组)
LeetCode 560:给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。采用前缀和定律求解。原创 2023-02-21 17:14:21 · 218 阅读 · 0 评论 -
【LeetCode】二叉树的直径 [E](二叉树)
LeetCode 543:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。采用二叉树递归求解。原创 2023-02-21 11:14:34 · 352 阅读 · 0 评论 -
【LeetCode】找到字符串中所有字母异位词 [M](滑动窗口)
LeetCode 337:给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指字母相同,但排列不同的字符串。采用滑动窗口求解。原创 2023-02-17 15:54:41 · 390 阅读 · 0 评论 -
【LeetCode】路径总和 III [M](前缀和)
LeetCode 437:给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。采用前缀和求解。原创 2023-02-16 23:23:33 · 90 阅读 · 0 评论 -
【LeetCode】环形链表 II [M](链表)
LeetCode 142:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。采用快慢指针求解。原创 2023-02-14 10:37:03 · 356 阅读 · 0 评论 -
【LeetCode】二叉树展开为链表 [M](Morris遍历)
LeetCode 114:给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。采用Morris遍历求解。原创 2023-02-13 21:01:46 · 71 阅读 · 0 评论 -
【LeetCode】最长递增子序列的个数 [M](动态规划)
LeetCode 673:给定一个未排序的整数数组,找到最长递增子序列的个数。采用动态规划求解。原创 2023-02-06 21:57:12 · 397 阅读 · 0 评论 -
【LeetCode】最长同值路径 [M](二叉树)
LeetCode 687:给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。注意:两个节点之间的路径长度由它们之间的边数表示。注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。采用二叉树递归求解。原创 2023-02-03 09:49:32 · 290 阅读 · 0 评论 -
【LeetCode】四数相加 II [M](哈希表)
LeetCode 454:给定四个包含整数的数组列表 A , B , C , D,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过 2^31 - 1 。采用哈希表求解。原创 2023-02-02 15:18:53 · 331 阅读 · 0 评论 -
【LeetCode】至少有 K 个重复字符的最长子串 [M](滑动窗口)
LeetCode 395:给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串,要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度。采用滑动窗口求解。原创 2023-02-02 12:42:11 · 521 阅读 · 0 评论 -
【LeetCode】前 K 个高频元素 [M](堆)
LeetCode 347:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。采用堆求解。原创 2023-01-31 17:18:51 · 162 阅读 · 0 评论 -
【LeetCode】打乱数组 [M](随机化)
LeetCode 384:给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。实现 Solution class: • Solution(int[] nums) 使用整数数组 nums 初始化对象 • int[] reset() 重设数组到它的初始状态并返回 •int[] shuffle() 返回数组随机打乱后的结果采用随机数求解。原创 2023-01-31 15:26:24 · 268 阅读 · 0 评论 -
【LeetCode】O(1) 时间插入、删除和获取随机元素 [M](哈希表)
LeetCode 324:设计一个支持在平均时间复杂度 O(1) 下,执行以下操作的数据结构。 • insert(val):当元素 val 不存在时,向集合中插入该项。 • remove(val):元素 val 存在时,从集合中移除该项。getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。采用哈希表求解。原创 2023-01-31 14:25:31 · 476 阅读 · 0 评论 -
【LeetCode】奇偶链表 [M](链表)
LeetCode 328:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。采用链表求解。原创 2023-01-30 10:59:50 · 201 阅读 · 0 评论 -
【LeetCode】二叉树的序列化与反序列化 [H](二叉树)
LeetCode 297:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。采用二叉树序列化和反序列化求解。原创 2023-01-24 11:19:57 · 1407 阅读 · 0 评论 -
【LeetCode】数据流的中位数 [H](堆)
LeetCode 295:设计一个支持以下两种操作的数据结构: • void addNum(int num) - 从数据流中添加一个整数到数据结构中。 • double findMedian() - 返回目前所有元素的中位数。采用堆求解。原创 2023-01-23 21:57:52 · 591 阅读 · 1 评论 -
【LeetCode】除自身以外数组的乘积 [M](数组)
LeetCode 238:给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。采用后缀乘积求解。原创 2023-01-12 16:35:41 · 464 阅读 · 0 评论 -
【LeetCode】二叉树的最近公共祖先 [M](二叉树递归)
LeetCode 236:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。采用中二叉树递归求解。原创 2023-01-12 14:51:19 · 280 阅读 · 0 评论 -
【LeetCode】二叉搜索树中第K小的元素 [M](二叉树遍历)
LeetCode 230:给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。采用中序遍历求解。原创 2023-01-11 17:09:54 · 206 阅读 · 0 评论 -
【LeetCode】基本计算器 II [M](栈)
LeetCode 227:给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。采用栈求解。原创 2023-01-11 16:36:07 · 525 阅读 · 0 评论 -
【LeetCode】课程表 II [M](拓扑排序)
LeetCode 210:现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。采用拓扑排序求解。原创 2023-01-10 13:10:23 · 459 阅读 · 0 评论 -
【LeetCode】实现 Trie (前缀树) [M](前缀树)
LeetCode 208:构造前缀树结构。采用前缀树求解。原创 2023-01-09 20:37:20 · 597 阅读 · 0 评论 -
【LeetCode】 课程表 [M](拓扑排序)
LeetCode 207:你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;采用拓扑排序求解。原创 2023-01-09 16:47:30 · 460 阅读 · 0 评论 -
【LeetCode】最小栈 [M](栈)
LeetCode 155:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。采用栈求解。原创 2023-01-05 12:40:59 · 533 阅读 · 0 评论 -
【LeetCode】逆波兰表达式求值 [M](栈)
LeetCode 150:给你一个字符串数组 tokens ,表示一个根据逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。采用栈求解。原创 2023-01-04 20:00:06 · 408 阅读 · 0 评论 -
【LeetCode】排序链表 [M](排序)
LeetCode 148:给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。采用归并排序求解。原创 2023-01-04 14:25:17 · 154 阅读 · 0 评论 -
【LeetCode】单词拆分 II [H](动态规划)
LeetCode 140:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。采用动态规划求解。原创 2023-01-03 17:20:57 · 447 阅读 · 0 评论 -
【LeetCode】二叉树中的最大路径和 [H](递归)
LeetCode 124:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。采用二叉树递归求解。原创 2022-12-30 12:53:24 · 1047 阅读 · 0 评论 -
【LeetCode】填充每个节点的下一个右侧节点指针 [M](二叉树遍历)
LeetCode 116:填充每个节点的下一个右侧节点指针。这里要求时间复杂度O(N),额外空间复杂度O(1)。采用二叉树中序遍历求解。原创 2022-12-29 15:13:22 · 551 阅读 · 0 评论 -
【LeetCode】从前序与中序遍历序列构造二叉树 [M](二叉树重构)
LeetCode 105:给定两个整数数组preorder 和 inorder,其中preorder 是二叉树的先序遍历, inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。采用二叉树重构求解。原创 2022-12-29 10:08:12 · 325 阅读 · 0 评论 -
【LeetCode】二叉树的锯齿形层序遍历 [M](二叉树遍历)
LeetCode 94:给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。采用二叉树中序遍历求解。原创 2022-12-29 09:44:23 · 106 阅读 · 0 评论 -
【LeetCode】验证二叉搜索树 [M]
LeetCode 98:给给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。采用二叉树递归和Morris遍历求解。原创 2022-12-28 16:51:22 · 658 阅读 · 0 评论 -
【LeetCode】字母异位词分组 [M](字符串)
LeetCode 49:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。你可以 按任意顺序 返回答案。采用哈希表求解。原创 2022-12-25 13:54:54 · 545 阅读 · 0 评论 -
【LeetCode】删除链表的倒数第 N 个结点 [M](双指针)
LeetCode 19:给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。采用双指针求解。原创 2022-12-20 17:59:51 · 99 阅读 · 0 评论 -
【LeetCode】单词搜索 II [H](前缀树)
LeetCode 212:给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。采用前缀树求解。原创 2022-12-12 20:42:55 · 442 阅读 · 0 评论 -
【LeetCode】三数之和 [M](双指针)
LeetCode 15:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个不同的元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。采用双指针求解。原创 2022-12-10 10:43:56 · 495 阅读 · 0 评论