题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入:head = [1], n = 1 输出:[] 示例 3: 输入:head = [1,2], n = 1 输出:[1] 提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <= sz 解题思…

2021年4月28日 0条评论 142点热度 1人点赞 agedcat_xuanzai 阅读全文

题目描述 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 解题思路 这道题我们可以运用递归写出非常简洁和通俗易懂的代码,需要注意递归时函数参数的设定。 在求解的过程中,我们主要利用了前序遍历和中序遍历的性质: 对于任意一颗树而言,前序遍历的形式总是: [ 根节点, [左子树的前序遍历结果], …

2021年4月27日 0条评论 191点热度 1人点赞 agedcat_xuanzai 阅读全文

题目描述 给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 给定链表 1->2->3->4, 重新排列为 1->4->2->3. 示例 2: 给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3. 解题思路 这道题可以简单粗暴莽一波。思路就是先找到中间结点,…

2021年4月27日 0条评论 120点热度 0人点赞 agedcat_xuanzai 阅读全文

题目描述 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目表示。 解题思路 这道题可以借鉴Leetcode124. 二叉树中的最大路径和中的思路,用相似的DFS搜索方法来求解。 这道题相比较最大路径和,要简单了很多。我们需要求解左子树和右子树的层数,并且用…

2021年4月27日 0条评论 207点热度 1人点赞 agedcat_xuanzai 阅读全文

题目描述 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 输出:[[5,4,11,2],[5,8,4,5]] 示例 2: 输入:root = [1,2,3], targetSum = 5 输出:[] 示例 3: 输入:root = [1,2], targetS…

2021年4月26日 1条评论 190点热度 2人点赞 agedcat_xuanzai 阅读全文

题目描述 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 $ \lfloor n/2 \rfloor$的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:[3,2,3] 输出:3 示例 2: 输入:[2,2,1,1,1,2,2] 输出:2 进阶: 尝试设计时间复杂度为 $O(n)$、空间复杂度为$ O(1) $的算法解决此问题。 解题思路 这道题最简单的方法就是哈希法。也就是同一个哈希表去存储每一个元素以及出现的次数,然后返回出现次数大于$ \l…

2021年4月26日 0条评论 192点热度 1人点赞 agedcat_xuanzai 阅读全文

题目描述 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 解题思路 这道题的思路很简单。算法主要分为三部分: 找出中间结点 中间结点可以通过快慢指针来寻找。设置两个指针,初始为首节点,然后一个指针一次走两步,一个指针一次走一步,当后一个指针走到末尾的时候,前一个指针指向的就是中间结点。 将链表的后半部分反转 将链表的后半部分反…

2021年4月26日 0条评论 156点热度 1人点赞 agedcat_xuanzai 阅读全文

题目描述 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。 示例 1: 输入:root = [1,2,3] 输出:6 解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6 示例 2: 输入:root = [-10,9,20,null,null,15,7] 输出:…

2021年4月25日 1条评论 225点热度 2人点赞 agedcat_xuanzai 阅读全文

题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。 示例 1: 输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入:intervals = [[1,4],[4,5]…

2021年4月25日 0条评论 140点热度 1人点赞 agedcat_xuanzai 阅读全文

题目描述 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 示例: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出:3 解释: 长度最长的公共子数组是 [3, 2, 1] 。 提示: 1 <= len(A), len(B) <= 1000 0 <= A[i], B[i] < 100 解题思路 这道题和最长公共子序列有些类似,又有些不同。我们可以考虑使用动态规划法和滑动窗口法求解。 方法一:动态规划法 我们可以借鉴使用动态规划法求解最长公共…

2021年4月25日 0条评论 147点热度 1人点赞 agedcat_xuanzai 阅读全文
12