随笔分类 - LeetCode
摘要:1. 题目 2. 解答 C++ 遍历数组,将数组中的元素和索引分别作为 unordered_map 的键和值,如果目标值和当前元素的差已经存于在map 的键中,即找到结果。 c class Solution { public: vector twoSum(vector& nums, int targ
阅读全文
摘要:1. 题目 2. 解答 2.1 方法一 在 "LeetCode 206——反转链表" 和 "LeetCode 2——两数相加" 的基础上,先对两个链表进行反转,然后求出和后再进行反转即可。 2.2 方法二 先求出两个链表的长度,然后对齐两个链表,按照对应位分别求出每一位的和以及进位,最后从最低位也就
阅读全文
摘要:1. 题目 2. 解答 2.1 方法 1 定义快慢两个指针,慢指针每次前进一步,快指针每次前进两步,若链表有环,则快慢指针一定会相遇。 2.2 方法 2 用 unordered_map 充当散列表的功能,每次将链表的节点指针作为键值存入 map,如果检测到当前节点指针已经存在于 map 中则说明链表
阅读全文
摘要:1. 题目 2. 解答 2.1 方法 1 定义快慢两个指针,慢指针每次前进一步,快指针每次前进两步,若链表有环,则快慢指针一定会相遇。 当快慢指针相遇时,我们让慢指针指向头节点,快指针不变,然后每次快慢指针都前进一步,当两个指针再次相遇时,两个指针所指向的节点就是入环节点。 将链表的环向后展开,如上
阅读全文
摘要:1. 题目 2. 解答 第一次遍历链表的时候,复制旧链表的节点值建立一个新的链表,同时定义一个 unordered_map 作为哈希表,哈希表的键为旧链表的节点指针,值为新链表的节点指针。 然后,第二次遍历链表,访问旧链表节点的随机指针,然后以此为键从 map 中取出对应的新链表节点指针,这也就是当
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 在 "LeetCode 108——将有序数组转化为二叉搜索树" 中,我们已经实现了将有序数组转化为二叉搜索树。因此,这里,我们可以先遍历一遍链表,将节点的数据存入有序数组中,然后再将有序数组转化为二叉搜索树即可。 2.2. 方法二 将有序数组转化为二叉搜索树
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 从矩阵的左下角开始比较 目标值等于当前元素,返回 true; 目标值大于当前元素,j 增 1,向右查找,排除掉此列上边的数据(都比当前元素更小); 目标值小于当前元素,i 减 1,向上查找,排除掉此行右边的数据(都比当前元素更大)。 2.2. 方法二 $$\
阅读全文
摘要:1. 题目 2. 解答 针对两棵树的根节点,有下列四种情况: p 和 q 都为空,两棵树相同; p 不为空 q 为空,两棵树不相同; p 为空 q 不为空,两棵树不相同; p 和 q 都不为空,如果两个节点的值相同,而且递归判断左右子树也相同的话,两棵树相同,反之两棵树不同。 获取更多精彩,请关注「
阅读全文
摘要:1. 题目 2. 解答 2.1. 方法一 我们初始化根节点的范围为长整形数据的最小最大值 $[LONG\_MIN,LONG\_MAX]$,则其左子节点的取值范围为 $[LONG\_MIN,根节点值]$,右子节点的取值范围为 $[根节点值,LONG\_MAX]$。 以此类推,可以得到,如果父节点的取值
阅读全文
摘要:1. 题目 2. 解答 以 $1, 2, \cdots, n$ 构建二叉搜索树,其中,任意数字都可以作为根节点来构建二叉搜索树。当我们将某一个数字作为根节点后,其左边数据将构建为左子树,右边数据将构建为右子树。因此,这是一个递归问题。 假设序列为 $[begin, end]$,若以第 $i$ 个数据
阅读全文
摘要:1. 题目 2. 解答 以 $1, 2, \cdots, n$ 构建二叉搜索树,其中,任意数字都可以作为根节点来构建二叉搜索树。当我们将某一个数字作为根节点后,其左边数据将构建为左子树,右边数据将构建为右子树。因此,这是一个递归问题。 若以第 $i$ 个数据为根节点,其左边数据有 $i 1$ 个,左
阅读全文
摘要:1. 题目 2. 解答 一棵高度平衡的二叉搜索树意味着根节点的左右子树包含相同数量的节点,也就是 根节点为有序数组的中值 。 因此,我们将数组的中值作为根节点,然后再递归分别得到左半部分数据转化的左子树和右半部分数据转化的右子树即可。 递归终止的条件是数组为空,这时候返回 NULL。 获取更多精彩,
阅读全文
摘要:1. 题目 2. 解答 如果根节点为空,直接返回 0。如果根节点非空,递归得到其左右子树的深度,树的深度就为左右子树深度的最大值加 1。 获取更多精彩,请关注「seniusen」!
阅读全文
摘要:1. 题目 2. 解答 如果根节点为空,直接返回 NULL。如果根节点非空,从根节点开始循环查找,直到节点为空。 如果待查找的值大于当前节点值,节点指向右孩子; 如果待查找的值小于当前节点值,节点指向左孩子; 如果待查找的值等于当前节点值,返回当前节点。 若循环结束还没有找到,返回 NULL。 获取
阅读全文
摘要:1. 题目 2. 解答 与 "LeetCode 102 ——二叉树的层次遍历" 类似, 我们只需要将每一层的数据倒序输出即可 。 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level_data 和一个存放每一层节点的队列 node_queue。 如果根节点非空,根节点进队,
阅读全文
摘要:1. 题目 2. 解答 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level_data 和一个存放每一层节点的队列 node_queue。 如果根节点非空,根节点进队,然后循环以下过程直至队列为空: 1. 得到队列的大小,即为树中当前层的节点个数。队列元素循环出队,并将节点
阅读全文
摘要:1. 题目 2. 解答 2.1. 递归法 定义一个存放树中数据的向量 data,从根节点开始,如果节点不为空,那么 1. 递归得到其左子树的数据向量 temp,将 temp 合并到 data 中去 2. 递归得到其右子树的数据向量 temp,将 temp 合并到 data 中去 3. 将当前节点的数
阅读全文
摘要:1. 题目 2. 解答 2.1. 递归法 定义一个存放树中数据的向量 data,从根节点开始,如果节点不为空,那么 1. 将当前节点的数值加入到 data 中 2. 递归得到其左子树的数据向量 temp,将 temp 合并到 data 中去 3. 递归得到其右子树的数据向量 temp,将 temp
阅读全文
摘要:1. 题目 2. 解答 2.1. 递归法 定义一个存放树中数据的向量 data,从根节点开始,如果节点不为空,那么 1. 递归得到其左子树的数据向量 temp,将 temp 合并到 data 中去 2. 将当前节点的数值加入到 data 中 3. 递归得到其右子树的数据向量 temp,将 temp
阅读全文
摘要:1. 题目 2. 解答 用一个单链表来实现,只有一个头指针。因为不能建立哨兵结点,因此要特别注意是否在头结点处操作。 获取更多精彩,请关注「seniusen」!
阅读全文

浙公网安备 33010602011771号