摘要:1. 题目 2. 解法 解题思路 我们要找到两个指定节点的最近公共祖先,也就是说,我们要找到一个节点,它是两个指定节点的祖先,而且它的深度尽可能大。 为了找到这样的节点,我们可以从根节点开始,递归地遍历二叉树,判断每个节点是否满足这个条件。 如果一个节点满足这个条件,那么它必须同时满足以下两个子条件
阅读全文
lotus贵有恒何必三更眠五更起 最无益只怕一日曝十日寒 |
|
随笔分类 - 算法
摘要:1. 题目 2. 解法 解题思路 我们要找到两个指定节点的最近公共祖先,也就是说,我们要找到一个节点,它是两个指定节点的祖先,而且它的深度尽可能大。 为了找到这样的节点,我们可以从根节点开始,递归地遍历二叉树,判断每个节点是否满足这个条件。 如果一个节点满足这个条件,那么它必须同时满足以下两个子条件
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/validate-binary-search-tree/ 考察点 这道题的考察点是: 对二叉搜索树的定义和性质的理解和掌握。 对递归和迭代的思想和实现的熟练度。 对中序遍历的原理和应用的掌握。 对边界值和特殊情况的处理能力。 2.
阅读全文
摘要:1. 题目 考察点 考察点是二叉树的遍历和构造,以及分治法的应用 二叉树的遍历有前序遍历,中序遍历和后序遍历三种方式,它们的区别在于根节点的访问顺序。前序遍历是先访问根节点,再访问左子树,最后访问右子树。中序遍历是先访问左子树,再访问根节点,最后访问右子树。后序遍历是先访问左子树,再访问右子树,最后
阅读全文
摘要:1. 题目 考察点 这道题的考察点是二叉树的遍历和展平, 需要掌握前序遍历,中序遍历和后序遍历的顺序和方法,以及如何将二叉树转换为链表的技巧。 这道题可以用递归,迭代或者原地修改的方式来解决,需要注意展平后的链表要保持和二叉树的前序遍历相同的顺序。 这道题也可以扩展为按照中序遍历或者后序遍历的顺序来
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/implement-trie-prefix-tree/ 2. 解法 什么是 Trie (前缀树)? Trie (前缀树) 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。 它的每个节点都包含一个长度为 26 的数组,用
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/daily-temperatures/ 2. 解法 单调栈 单调栈是一种满足单调性的栈结构,也就是说,栈中的元素按照它们在栈内的位置,要么递增,要么递减。 单调栈可以在O(n)的时间复杂度内解决一些找到下一个更大或更小元素的问题,
阅读全文
摘要:1. 题目 2. 解法 有两种常见的方法: 一种是使用数组和滑动窗口, 另一种是使用单调栈。 数组和滑动窗口 思路 使用数组和滑动窗口的方法的思路是: 对于每个元素,如果我们知道它左右两边第一个比它小的元素的下标,那么我们就可以计算出以它为高度的最大矩形的宽度,即右边界减去左边界再减一。 为了找到每
阅读全文
摘要:1. 题目 考察点 这道题的考察点是: 链表的基本操作,如遍历,插入,删除等。 链表的反转技巧,如头插法,递归法等。 边界条件的处理,如空链表,k 为 1,k 大于链表长度等 2. 解法 思路 这段代码的思路是: 使用一个虚拟节点 dummy 来简化代码,让它指向头节点。 使用三个指针 prev,c
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/lru-cache/ 2. 解法 解题思路是 使用一个双向链表和一个哈希表来实现一个LRU缓存机制。 双向链表用来存储最常使用的键值对,最近使用的元素放在链表的表头,链表中最后一个元素是使用频率最低的元素。 哈希表用来记录对应的<
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/reorder-list/ 考察点 这道题的考察点是链表的操作,包括找到链表的中点,反转链表,合并链表等。这些操作都是链表的基本技巧,需要熟练掌握 这道题也可以看作是一个数学问题,就是如何把一个序列重新排列成另一个序列,满足一定的
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/merge-k-sorted-lists/ 考察点 Leetcode 23 是一个关于合并 k 个有序链表的问题。它考察的是排序、分治和合并排序的知识。 你需要使用一个优先队列或者一个最小堆来维护 k 个链表的当前最小元素, 然后
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/reverse-linked-list-ii/ 2. 解法 思路是: 首先,创建一个哑节点作为链表的头部,这样可以避免处理边界情况,比如left等于1的时候。 然后,创建一个前驱节点,初始化为哑节点,用来记录反转区间的前一个节点。
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 2. 解法 这道题的目标是删除链表中倒数第n个节点,例如,给定链表1->2->3->4->5和n=2,要求删除倒数第二个节点,即4,返回1->2->3->5。 这
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/add-two-numbers/ 2. 解法 解答思路。 为了解决这个问题,我们需要模拟两数相加的过程,从低位到高位,逐位相加,并考虑进位的情况。我们可以使用以下的步骤: 创建一个虚拟头节点,它不存储任何值,只是为了方便返回结果链
阅读全文
摘要:1. 题目 考察点 这道题的考察点是数组,排序,堆和快速选择算法。 你需要知道如何对数组进行排序,以及不同的排序算法的时间和空间复杂度。 你需要知道如何使用堆来维护一个有序的集合,以及如何利用堆的性质来快速找到第k个最大的元素。 你需要知道如何使用快速选择算法来在平均O(n)的时间内找到第k个最大的
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/top-k-frequent-elements/ 考察点 这道题的考察点是: 如何使用哈希表来统计元素的出现频率。 如何使用最小堆来找出前k个高频元素。 如何利用堆的性质来优化时间复杂度。 如何使用合适的数据结构来存储和返回结果。
阅读全文
摘要:1. 题目 2. 解法 3. 总结
阅读全文
摘要:1. 题目 https://leetcode.cn/problems/jump-game/ 考察点 这道题的考察点是数组和动态规划。 数组是一种基本的数据结构,需要掌握如何遍历、访问和修改数组中的元素。 动态规划是一种常用的算法思想,需要掌握如何找到问题的最优子结构、状态转移方程和边界条件。 这道题
阅读全文
摘要:1. 题目 2. 解法 3. 总结
阅读全文
|