
经典题型
刷题记录
lightupworld
这个作者很懒,什么都没留下…
展开
-
二叉树遍历系列总结+递归/迭代的统一写法
二叉树遍历系列总结+递归/迭代的统一写法一、题目二、分析:DFS/BFS 与树的遍历三、递归的写法四、迭代写法1. 不统一版本的迭代写法2. 统一版本写法 本文提供LeetCode 二叉树 前中序层 四种遍历方式的 递归 和 迭代 统一写法 递归写法很简单,在面试中不足以获得面试官的青睐,应该重点掌握迭代写法 一、题目 144. 二叉树的前序遍历 94 . 二叉树的中序遍历 145. 二叉树的后序遍历 二、分析:DFS/BFS 与树的遍历 有两种通用的遍历树的策略: 深度优先搜索(DFS) 在原创 2020-07-20 16:53:13 · 1122 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和——从这题开始学习动态规划
剑指 Offer 42. 连续子数组的最大和——从这题开始学习动态规划一、题目二、分析三、题解四、复杂度 这题是典型的动态规划题目,新手可以从这题开始入手动态规划,从动态规划的概念 到 解题思路 到最后的优化方式。 一、题目 剑指 Offer 42. 连续子数组的最大和 二、分析 动态规划入门文章参考:什么是动态规划(Dynamic Programming)?动态规划的意义是什么? 1.能不能使用动态规划 一个问题能不能动态规划 有以下三点: 1.重叠子结构:一个大的问题能否拆成若干小问题 2.满足原创 2020-08-20 13:04:34 · 138 阅读 · 0 评论 -
141.环形链表——HashMap+快慢指针详解
环形链表一、题目二、分析141.环形链表分析方法一:哈希表方法二:双指针142.环形链表II分析方法一:哈希表方法二:双指针三、题解四、复杂度 本文主要讲解leetcode中141.环形链表和142.环形链表II 基于 HashMap 和 快慢指针两种解法。 一、题目 141.环形链表 142.环形链表II 二、分析 141.环形链表分析 方法一:哈希表 思路 我们可以通过检查结点此前是否被访问过来判断链表是否为环形链表。常用的方法是使用哈希表 算法 我们遍历所有结点并在哈希表中存储每个结点的引原创 2020-08-19 12:45:27 · 370 阅读 · 0 评论 -
695.岛屿的最大面积——DFS详解+网格类题目通用解法
695.岛屿的最大面积一、题目二、分析三、题解四、复杂度 一、题目 给定一个包含了一些 0 和 1 的非空二维数组 grid 。 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。 找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。) 示例 1: [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0],原创 2020-08-04 18:48:47 · 364 阅读 · 2 评论 -
5. 最长回文子串——暴力解法+动态规划+中心扩散
5. 最长回文子串一、题目二、分析三、题解 一、题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” 链接: 5.最长回文串 二、分析 暴力匹配 最简单也是最直接的方法。直接暴力遍历字符串,枚举所有长度>= 2的子串,依次判是否是回文。具体实现时,记录当前回文串的长度,可以根据当前的最大长原创 2020-07-27 17:17:11 · 355 阅读 · 1 评论 -
剑指 Offer 07. 重建二叉树——【前中序】和【中后序】重建二叉树的递归思路详解
剑指 Offer 07. 重建二叉树一、题目二、分析三、题解四、复杂度分析五、扩展:从中序与后序遍历序列构造二叉树 一、题目 剑指 Offer 07. 重建二叉树 105. 从前序与中序遍历序列构造二叉树 二、分析 [首先不考虑代码,如何根据前序中序将二叉树还原] 前序遍历的特点: 节点按照 [根 | 左 | 右] ; 后序 :[根 | 左 | 右] 排序 根据以上特点,按照以下顺序 可以 还原出二叉树 1. 前序数组的首个元素即为根节点root的值 2. 在中序数组中找到根节点root原创 2020-07-22 14:51:04 · 214 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度——DFS+BFS解题
剑指 Offer 55 - I. 二叉树的深度一、题目二、分析三、题解 一、题目 二、分析 二叉数遍历问题一般就两种解题方法:DFS + DFS 可参考文章:二叉树遍历系列总结+递归/迭代的统一写法 三、题解 DFS class Solution { public int maxDepth(TreeNode root) { //【递归 实质上就是 DFS】 //递归终止条件 if(root == null) return 0原创 2020-07-21 15:32:30 · 164 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数——TopN问题
剑指 Offer 40. 最小的k个数_TopN问题一、题目二、题解分析三、题解四、复杂度分析 一、题目 输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 示例 1: 输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1] 示例 2: 输入:arr = [0,1,2,1], k = 1 输出:[0] 限制: 0 <= k <= arr.length <= 10原创 2020-07-17 18:03:38 · 184 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和——动态规划详细解题思路
剑指 Offer 42. 连续子数组的最大和 一、题目 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 提示: 1 <= arr.length <= 10^5 -100 <= arr[i] <= 100 注意:本题与主站 53原创 2020-07-15 14:56:38 · 241 阅读 · 0 评论