![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
Miiiiiiiiiii
这个作者很懒,什么都没留下…
展开
-
【LeetCode之树总结】 树类型所有题总结
文章目录树94. 二叉树的中序遍历二叉树的遍历递归写法非递归写法95. 不同的二叉搜索树 ||利用二叉搜索树中序遍历有序性96.不同的二叉搜索树二叉搜索树中序遍历有序性98. 验证二叉搜索树二叉搜索树中序遍历有序性中序遍历中验证是否满足二叉搜索树的性质100. 相同的树递归101. 对称二叉树解题102. 二叉树的层序遍历层序遍历103. 二叉树的锯齿形层次遍历二叉树的层序遍历104. 二叉树的最大深度dfs一行代码层序遍历求深度105. 从前序与中序遍历序列构造二叉树(经典)前序中序建树106. 从中序与原创 2020-11-18 23:06:49 · 315 阅读 · 0 评论 -
【LeetCode动态规划标签入门总结】 线性DP(持续更新)
动态规划动态规划(Dynamic Programming),简称DP,为了求最优解,我们可以将问题分成多个子问题,先求子问题的最优解,从而递推出全局最优解,动态规划的思想基于分治。动态规划一般要考虑状态表示和状态方程。考虑到有些DP问题时间复杂度较大,一般用迭代,也可以用递归来写。线性DP线性DP最大的特征是从一个最小的子问题来向大的问题推导的。所以叫线性DP,例如斐波那契数列53. 最大子序和在该问题上,最小的子问题是序列只有一个数字,那么子序列和最大值肯定是该数字本身。如果有两个数字,要原创 2020-11-13 19:39:06 · 323 阅读 · 0 评论 -
【LeetCode】106. 从中序与后序遍历序列构造二叉树(递归、二叉树、中序后序建二叉树)
经典二叉树问题,建议搭配前序中序建树一起看,附带链接:105. 从前序与中序遍历序列构造二叉树题目根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:中序后序唯一确定一棵二叉树和105题类似,建议先看看105题的解法,下面我会直接给出代码先看看中序遍历和后序遍历:中序遍历:左右根后序遍历:左右根时原创 2020-11-12 00:50:21 · 110 阅读 · 0 评论 -
【LeetCode】105. 从前序与中序遍历序列构造二叉树(递归、二叉树、前序中序建二叉树)
前序和中序遍历能够唯一确定一颗二叉树,算经典问题吧题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:前序中序唯一确定一棵二叉树先来复习一下数据结构:前序遍历:先遍历根节点,在遍历左子树,最后遍历右子树。中序遍历:先遍历左子树,在遍历根节点,最后遍历右子树。简单来说:前序:根左右中序:左根右从原创 2020-11-11 23:50:09 · 137 阅读 · 0 评论 -
【LeetCode】104. 二叉树的最大深度(递归、二叉树)
EZ题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。DFS求深度一行就能搞定。时间复杂度O(N),空间复杂度(H),H树的高度dfs之一行代码/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2020-11-11 22:34:31 · 94 阅读 · 0 评论 -
【LeetCode】103. 二叉树的锯齿形层次遍历(递归、二叉树、层序遍历)
看下面之前请先完成102题.二叉树的层序遍历,附带链接:102.二叉树的层序遍历题目给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],返回锯齿形层次遍历如下:二叉树层序遍历的扩展如果你会层序遍历,那你就会该题。上一题102题二叉树的层序遍历,我们每次从队列中取出当前层从左到右的所有数。而这题,需要遍历成一个类似s型,如果把根节点看成第0层,我们原创 2020-11-11 22:06:33 · 185 阅读 · 0 评论 -
【LeetCode】102. 二叉树的层序遍历(递归、二叉树、层序遍历)
树的基础,必须会,该题只不过是层序遍历要求求一下层数。题目给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7]返回其层次遍历结果:二叉树的层序遍历该题是二叉树的层序遍历,并且还要求每层是哪几个数,即求每个结点的层数。和传统的层序遍历一样,使用一个队列,先将根节点入队,每次从队列中取出一个数遍历,并且将该数的儿子入队,一直到队空时。时间复杂度O(N)AC代码/** * De原创 2020-11-11 21:43:51 · 104 阅读 · 0 评论 -
【LeetCode】101. 对称二叉树(递归、二叉树)
该题和100题类似,附带100题链接:100.相同的树题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:进阶:你可以运用递归和迭代两种方法解决这个问题吗?解题思路我们发现,对称的二叉树,根节点相同,并且左子树和右子树镜像的对称。上题是根节点相同,左子树和右子树结构且对对应的值相同。时间复杂度O(N),空间复杂度O(H),H为树的高度AC代码/**原创 2020-11-11 21:22:17 · 71 阅读 · 0 评论 -
【LeetCode】100. 相同的树(递归、树)
抓住树相同条件:结构相同,对应结点的值也相同 记得去年学数据结构刚学树还很难理解…题目给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:示例 2:示例 3:递归求解对于该题,我们需要考虑什么时候能说明树一定是相同的呢?还有什么时候说明树一定相同?以上的条件就算递归的终止条件两棵树一定不相同的条件当前树结点是空,另外一棵树当前节点非空两棵树当前节点虽然都不空,但是值不同。两棵树一定相同的条原创 2020-11-11 20:29:56 · 97 阅读 · 0 评论 -
【LeetCode】98. 验证二叉搜索树(树、二叉搜索树、递归)
本题是利用二叉搜索树的性质:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解题的思路也是基于上述三个性质的。空树也是二叉搜索树题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:示例 2:中序遍历,判断是否有序由中序遍历,序列有序,则原创 2020-11-11 11:48:53 · 114 阅读 · 0 评论 -
【LeetCode】96. 不同的二叉搜索树 (树、二叉搜索树、动态规划)
本题是上一题的扩展,上一题是求所有方案,该题是求方案数,请先完成上一题:,链接:95. 不同的二叉搜索树 ||题目给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:卡塔兰数法n个数组成二叉搜索树的方案数是卡塔兰数,证明略…我们可以直接利用公式计算卡塔兰数即可,公式如下按照这个公式计算即可。附带评论大佬的时间复杂度O(1),空间复杂度O(1)算法:class Solut原创 2020-11-11 10:31:29 · 112 阅读 · 0 评论 -
【LeetCode】95. 不同的二叉搜索树 ||(树、二叉搜索树、递归)
本题可能半天想不出来本题主要是利用二叉搜索树的一个重要性质——二叉搜索树中序遍历有序性题目给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。示例:输入:3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:提示:0 <= n <= 8暴搜枚举+二叉搜索树中序遍历有序性利用二叉搜索树原创 2020-11-10 16:31:58 · 98 阅读 · 0 评论 -
【LeetCode】94. 二叉树的中序遍历(递归、树、非递归)
数据结构必须掌握的,基础了把,下面不仅有递归写法,还有迭代的写法。题目给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入: root = [1,null,2,3]输出:[1,3,2]二叉树的遍历先来复习一下二叉树的遍历吧:二叉树的前序遍历是根左右,中序遍历是左根右,后序遍历是左右根,一般前面三种遍历都是递归写法,也可以用迭代。层序遍历是一层一层的遍历,需要利用数据结构队列。前三个遍历时间复杂度O(N),空间复杂度O(H),H为树最高的高度。中序遍历递归写法原创 2020-11-10 15:15:45 · 101 阅读 · 0 评论 -
【LeetCode】25. K个一组翻转链表(超经典、链表、k个反转)
k个链表反转的问题,经典做该题之前必须要完成:206. 反转链表,如果这题都完不成,就不要继续往下看了。题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->原创 2020-11-09 21:26:42 · 269 阅读 · 0 评论 -
【LeetCode】24. 两两交换链表中的节点(超经典、链表、反转)
链表反转的问题有多经典就不说了做该题之前必须要完成:206. 反转链表,如果这题都完不成,就不要继续往下看了。题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入: head = [1,2,3,4]输出:[2,1,4,3]两个结点一反转题的大致的意思是两个结点一反转,不足两个结点的不反转。下面的图描述了每次对结点指针操作的顺序,其实p是虚拟头节点默认你会反转链表,所以应该知道,这是件麻烦的事情原创 2020-11-09 20:46:17 · 260 阅读 · 0 评论 -
【LeetCode】206. 反转链表(超经典、高频、链表)
经典到再也不能经典的问题了把,链表题一定要多画图,否则能调试1天。题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL经典反转链表我们先来看一张图,如何反转一个节点的呢?画图画的,忍忍。我们从最小的来看,如何反转两个相邻节点呢?我们需要将后面的节点的next域指向前面即可。再来看上图,如果我们直接把last的next域指向了pre,那么后面的节点我们是找不原创 2020-11-09 20:23:34 · 104 阅读 · 2 评论 -
【LeetCode】23. 合并K个升序链表(归并、链表、堆)
该题是经典的二路归并的扩展,做该题之前必须要完成 21. 合并两个有序链表 。如果合并两个有序链表都完不成,就不要继续往下看了。题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1-&g原创 2020-11-09 20:08:30 · 108 阅读 · 0 评论 -
【LeetCode】21. 合并两个有序链表(二路归并、链表)
水题~经典的二路归并,二路归并在归并排序中也有,附带归并排序链接:归并排序题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入: 1->2->4, 1->3->4输出: 1->1->2->3->4->4链表的二路归并经典的二路归并,用一个虚拟头节点,两个指针指向两个链表的头节点,向后遍历,由于两个链表是有序的,每次将两个链表中比较小的连到虚拟头节点链表后面。当一个链表走完了,再原创 2020-11-09 19:47:27 · 298 阅读 · 0 评论 -
【LeetCode】50.Pow(x, n) (快速幂)
快速幂,附带快速幂模板的链接:快速幂讲解题目实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−231, 231 −原创 2020-11-04 15:02:57 · 136 阅读 · 0 评论 -
【LeetCode】46. 全排列(经典全排列,暴搜,dfs)
全排列的模板题,只不过将1-n全排列变成了给定序列的全排列。附上链接:经典全排列题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。实例输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]DFS全排列问题的改进,全排列是填的数是1-n,该题是给定n个不重复的数。时间复杂度O(N!) , 空间复杂度O(N)经典全排列问题是枚举1-n,这里枚举的是给的那个nums[i],从而st数组本来表示当原创 2020-11-03 14:59:03 · 183 阅读 · 0 评论 -
【LeetCode】1. 两数之和(哈希表)
哈希表题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例 :给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]哈希表法利用哈希表,每次计算target - nums[i] 是否在哈希表中,如果哈希表中存在,则找到答案返回。若不存原创 2020-11-03 12:38:57 · 135 阅读 · 0 评论 -
【LeetCode】2. 两数相加(模拟,链表,高精度加法)
该题是我博客中高精度加法模板的应用~附带链接:高精度加法题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807高原创 2020-11-03 00:28:28 · 314 阅读 · 0 评论 -
【LeetCode】3. 无重复字符的最长子串(哈希表,双指针)
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]哈希表法:对于nums[i],如果要使得nums[j] + nums[i] = target,则nums[j] = target原创 2020-11-03 00:13:04 · 114 阅读 · 0 评论 -
【LeetCode】51. N皇后(经典回溯算法,dfs)
题目n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。实例输入: 4输出:[[".Q…", // 解法 1“…Q”,“Q…”,“…Q.”],["…Q.", // 解法 2“Q…”,“…Q”,“.Q…”]]解释: 4 皇后问题存在原创 2020-11-03 00:00:08 · 115 阅读 · 0 评论