Leetcode面试经典150
最经典 150 题,掌握面试所有知识点
Bonbon_wen
To be or not to be!
展开
-
Leetcode刷题287. 寻找重复数
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。示例 1:输入:nums = [1,3,4,2,2]输出:2示例 2:输入:nums = [3,1,3,4,2]输出:3 提示:1原创 2022-12-04 14:45:53 · 256 阅读 · 0 评论 -
Leetcode刷题124. 二叉树中的最大路径和
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。链接:https://leetcode.cn/problems/binary-tree-maximum-path-sum。解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。输入:root = [-10,9,20,null,null,15,7]输入:root = [1,2,3]来源:力扣(LeetCode)原创 2022-11-05 22:40:26 · 161 阅读 · 0 评论 -
Leetcode刷题103. 二叉树的锯齿形层序遍历
链接:https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal。给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]输入:root = [1]输入:root = []原创 2022-11-02 01:16:40 · 129 阅读 · 0 评论 -
Leetcode刷题56. 合并区间
给出一个区间的集合,请合并所有重叠的区间。示例 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]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。来源:力扣(LeetCode)链接:https://leetcode.原创 2021-01-03 00:04:59 · 348 阅读 · 1 评论 -
Leetcode刷题57. 插入区间
给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例2:输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2],[3,10],[12,16]]..原创 2021-01-03 14:12:30 · 211 阅读 · 0 评论 -
Leetcode刷题4. 寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。链接:https://leetcode.cn/problems/median-of-two-sorted-arrays。解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。商业转载请联系官方授权,非商业转载请注明出处。输入:nums1 = [1,2], nums2 = [3,4]输入:nums1 = [1,3], nums2 = [2]解释:合并数组 = [1,2,3] ,中位数 2。原创 2022-12-19 00:46:46 · 284 阅读 · 0 评论 -
Leetcode刷题215. 数组中的第K个最大元素
链接:https://leetcode.cn/problems/kth-largest-element-in-an-array。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。商业转载请联系官方授权,非商业转载请注明出处。输入: [3,2,3,1,2,4,5,5,6], k = 4。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。输入: [3,2,1,5,6,4], k = 2。原创 2022-12-18 23:42:35 · 343 阅读 · 0 评论 -
Leetcode刷题912. 排序数组
链接:https://leetcode.cn/problems/sort-an-array。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。给你一个整数数组 nums,请你将该数组升序排列。输入:nums = [5,1,1,2,0,0]输入:nums = [5,2,3,1]输出:[0,0,1,1,2,5]来源:力扣(LeetCode)输出:[1,2,3,5]原创 2022-12-12 00:50:21 · 486 阅读 · 0 评论 -
Leetcode刷题74. 搜索二维矩阵
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13。输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3。链接:https://leetcode.cn/problems/search-a-2d-matrix。编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。每行的第一个整数大于前一行的最后一个整数。每行中的整数从左到右按升序排列。原创 2023-02-05 23:35:15 · 327 阅读 · 0 评论 -
Leetcode刷题173. 二叉搜索树迭代器
next() 和 hasNext() 操作均摊时间复杂度为 O(1) ,并使用 O(h) 内存。你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 的中序遍历中至少存在一个下一个数字。注意,指针初始化为一个不存在于 BST 中的数字,所以对 next() 的首次调用将返回 BST 中的最小元素。时间复杂度,初始化和调用hasNext都只需要O(1)的时间,next方法最坏情况下需要O(N)的时间。时间复杂度O(N),对于next和hasNext方法都是O(1)。原创 2022-11-16 23:37:22 · 90 阅读 · 0 评论 -
Leetcode刷题54. 螺旋矩阵
给定一个包含m x n个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出: [1,2,3,4,8,12,11,10,9,5,6,7]来源:力扣(LeetCode)链接:https:/...原创 2020-12-09 23:26:54 · 224 阅读 · 0 评论 -
Leetcode刷题76. 最小覆盖子串
给你一个字符串 s 、一个字符串 t。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 ""。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:s = "ADOBECODEBANC", t = "ABC"注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)原创 2021-01-02 14:25:12 · 510 阅读 · 4 评论 -
Leetcode刷题167. 两数之和 II - 输入有序数组
如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1原创 2022-11-19 00:24:59 · 317 阅读 · 0 评论 -
Leetcode刷题105. 从前序与中序遍历序列构造二叉树
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]原创 2022-10-02 22:17:24 · 509 阅读 · 0 评论 -
Leetcode刷题114. 二叉树展开为链表
给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 1 / \ 2 5/ \ \3 4 6将其展开为:1\ 2 \ 3 \ 4 \ 5 \ 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list著作权归领扣...原创 2021-01-23 17:25:41 · 155 阅读 · 1 评论 -
Leetcode刷题3. 无重复字符的最长子串
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。商业转载请联系官方授权,非商业转载请注明出处。解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。给定一个字符串,请你找出其中不含有重复字符的。输入: s = "abcabcbb"输入: s = "pwwkew"输入: s = "bbbbb"来源:力扣(LeetCode)输入: s = ""原创 2021-01-02 20:17:30 · 261 阅读 · 0 评论 -
Leetcode刷题222. 完全二叉树的节点个数
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。链接:https://leetcode.cn/problems/count-complete-tree-nodes。给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。输入:root = [1,2,3,4,5,6]来源:力扣(LeetCode)输入:root = [1]输入:root = []原创 2022-10-30 00:50:23 · 80 阅读 · 0 评论 -
Leetcode刷题199. 二叉树的右视图
链接:https://leetcode.cn/problems/binary-tree-right-side-view。给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入: [1,2,3,4,null,null,null,7]输入: [1,2,3,null,5,null,4]输入: [1,null,3]输出: [1,3,4,7]输出: [1,3,4]原创 2022-11-13 21:55:15 · 125 阅读 · 0 评论 -
Leetcode刷题226. 翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。来源:力扣(LeetCode)链接:https://leetco...原创 2021-01-23 16:36:15 · 150 阅读 · 0 评论 -
Leetcode刷题104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree著作权归领扣网络所有。商业转载请...原创 2021-02-21 23:00:24 · 140 阅读 · 0 评论 -
Leetcode刷题129. 求根节点到叶节点数字之和
给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123。从根到叶子节点路径 4->9->5 代表数字 495。从根到叶子节点路径 4->9->1 代表数字 491。计算从根节点到叶节点生成的 所有数字之和。从根到叶子节点路径 1->2 代表数字 12。从根到叶子节点路径 1->3 代表数字 13。从根到叶子节点路径 4->0 代表数字 40。输入:root = [4,9,0,5,1]原创 2022-11-13 20:19:29 · 150 阅读 · 0 评论 -
Leetcode刷题106. 从中序与后序遍历序列构造二叉树
输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输入:inorder = [-1], postorder = [-1]著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输出:[3,9,20,null,null,15,7]来源:力扣(LeetCode)原创 2022-10-03 10:07:15 · 146 阅读 · 0 评论 -
Leetcode刷题102. 二叉树的层序遍历
链接:https://leetcode.cn/problems/binary-tree-level-order-traversal。给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]树中节点数目在范围 [0, 2000] 内。来源:力扣(LeetCode)输入:root = [1]输入:root = []原创 2022-10-29 22:34:38 · 412 阅读 · 0 评论 -
Leetcode刷题100. 相同的树
链接:https://leetcode.cn/problems/same-tree。给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。输入:p = [1,2], q = [1,null,2]输入:p = [1,2,3], q = [1,2,3]输入:p = [1,2,1], q = [1,1,2]来源:力扣(LeetCode)原创 2022-11-09 00:30:23 · 68 阅读 · 0 评论 -
Leetcode刷题209. 长度最小的子数组
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]著作权归领扣网络所有。给定一个含有 n 个正整数的数组和一个正整数 target。输入:target = 4, nums = [1,4,4]解释:子数组 [4,3] 是该条件下的长度最小的子数组。原创 2023-04-01 23:55:22 · 362 阅读 · 0 评论 -
Leetcode刷题117. 填充每个节点的下一个右侧节点指针 II
给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有next 指针都被设置为 NULL。示例:输入:root = [1,2,3,4,5,null,7]输出:[1,#,2,3,#,4,5,7,#]解释:给定二叉树如图 A 所示,你的函数应该...原创 2021-01-24 22:45:51 · 179 阅读 · 0 评论 -
Leetcode刷题101. 对称二叉树
链接:https://leetcode.cn/problems/symmetric-tree。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [1,2,2,null,3,null,3]给你一个二叉树的根节点 root , 检查它是否轴对称。输入:root = [1,2,2,3,4,4,3]树中节点数目在范围 [1, 1000] 内。来源:力扣(LeetCode)原创 2022-11-02 00:29:39 · 98 阅读 · 0 评论 -
Leetcode刷题112. 路径总和
判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22。输入:root = [1,2,3], targetSum = 5。解释:由于树是空的,所以不存在根节点到叶子节点的路径。不存在 sum = 5 的根节点到叶子节点的路径。解释:等于目标和的根节点到叶节点路径如上图所示。叶子节点 是指没有子节点的节点。原创 2022-11-12 18:45:00 · 575 阅读 · 0 评论 -
Leetcode刷题236. 二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。因为根据定义最近公共祖先节点可以为节点本身。输入:root = [1,2], p = 1, q = 2。原创 2022-10-30 22:47:25 · 209 阅读 · 0 评论 -
Leetcode刷题162. 寻找峰值
峰值元素是指其值大于左右相邻值的元素。给定一个输入数组nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 2。示例2:输入: nums = [1,2,1,3,5,6,4]输出: 1 或 5解释: 你的函数可以...原创 2020-12-11 23:38:35 · 248 阅读 · 0 评论 -
Leetcode刷题23. 合并K个升序链表
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。将它们合并到一个有序链表中得到。原创 2021-01-19 23:38:07 · 186 阅读 · 1 评论 -
Leetcode刷题81. 搜索旋转排序数组 II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,0,1,2,2,5,6]可能变为[2,5,6,0,0,1,2])。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回true,否则返回false。示例1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例2:输入: nums = [2,5,6,0,0,1,2], target = 3输出: false来源:力扣(LeetCode)链接...原创 2020-12-27 17:05:49 · 273 阅读 · 3 评论 -
Leetcode刷题35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。链接:https://leetcode.cn/problems/search-insert-position。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入: nums = [1,3,5,6], target = 5。输入: nums = [1,3,5,6], target = 2。输入: nums = [1,3,5,6], target = 7。原创 2023-02-04 22:25:38 · 420 阅读 · 0 评论 -
Leetcode刷题33. 搜索旋转排序数组
升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为[4,5,6,7,0,1,2] )。请你在数组中搜索target ,如果数组中存在这个目标值,则返回它的索引,否则返回-1。示例 1:输入:nums = [4,5,6,7,0,1,2], target = 0输出:4示例2:输入:nums = [4,5,6,7,0,1,2], target = 3输出:-1示例 3:输入:nums = [1], t...原创 2020-12-27 11:48:32 · 245 阅读 · 0 评论 -
Leetcode刷题148. 排序链表
给你链表的头结点head,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/...原创 2021-01-10 12:42:27 · 182 阅读 · 0 评论 -
Leetcode刷题108. 将有序数组转换为二叉搜索树
链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree。给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]输入:nums = [1,3]原创 2022-11-03 00:32:33 · 112 阅读 · 0 评论 -
Leetcode刷题154. 寻找旋转排序数组中的最小值 II
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]]。已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。请你找出并返回数组中的 最小元素。若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]若旋转 7 次,则可以得到 [0,1,4,4,5,6,7]输入:nums = [2,2,2,0,1]输入:nums = [1,3,5]原创 2023-03-12 00:25:10 · 209 阅读 · 0 评论 -
Leetcode刷题34. 在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。输入:nums = [5,7,7,8,8,10], target = 8。输入:nums = [5,7,7,8,8,10], target = 6。商业转载请联系官方授权,非商业转载请注明出处。如果数组中不存在目标值 target,返回 [-1, -1]。输入:nums = [], target = 0。nums 是一个非递减数组。输出:[-1,-1]输出:[-1,-1]原创 2022-12-29 22:43:02 · 142 阅读 · 0 评论 -
Leetcode刷题153. 寻找旋转排序数组中的最小值
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]]。解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]输入:nums = [4,5,6,7,0,1,2]原创 2023-03-12 00:09:36 · 207 阅读 · 0 评论 -
Leecode刷题125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/p...原创 2020-04-06 23:08:16 · 283 阅读 · 0 评论