leetcode面试经典150题
文章平均质量分 68
Ashiu
这个作者很懒,什么都没留下…
展开
-
215. 数组中的第K个最大元素
链接:https://leetcode.cn/problems/summary-ranges。请注意,你需要找的是数组排序后的第 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。来源:力扣(LeetCode)原创 2024-09-16 09:49:00 · 273 阅读 · 0 评论 -
502. IPO
总而言之,从给定项目中选择 最多 k 个不同项目的列表,以 最大化最终资本 ,并输出最终可获得的最多资本。输入:k = 2, w = 0, profits = [1,2,3], capital = [0,1,1]输入:k = 3, w = 0, profits = [1,2,3], capital = [0,1,2]当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。由于你最多可以选择两个项目,所以你需要完成 2 号项目以获得最大的资本。在完成后,你将获得 1 的利润,你的总资本将变为 1。原创 2024-09-16 09:46:41 · 263 阅读 · 0 评论 -
918. 环形子数组的最大和
形式上,对于子数组 nums[i], nums[i + 1], …, nums[j] ,不存在 i <= k1, k2 <= j 其中 k1 % n == k2 % n。形式上, nums[i] 的下一个元素是 nums[(i + 1) % n] , nums[i] 的前一个元素是 nums[(i - 1 + n) % n]。著作权归领扣网络所有。解释:从子数组 [3] 和 [3,-2,2] 都可以得到最大和 3。输入:nums = [1,-2,3,-2]输入:nums = [3,-2,2,-3]原创 2024-08-09 08:11:26 · 250 阅读 · 0 评论 -
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。给你一个整数 target ,如果 target 在矩阵中,返回 true;否则,返回 false。链接:https://leetcode.cn/problems/summary-ranges。每行的第一个整数大于前一行的最后一个整数。原创 2024-08-09 08:10:35 · 538 阅读 · 0 评论 -
162. 寻找峰值
给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。链接:https://leetcode.cn/problems/summary-ranges。商业转载请联系官方授权,非商业转载请注明出处。你可以假设 nums[-1] = nums[n] = -∞。输入:nums = [1,2,1,3,5,6,4]解释:你的函数可以返回索引 1,其峰值元素为 2;峰值元素是指其值严格大于左右相邻值的元素。或者返回索引 5, 其峰值元素为 6。原创 2024-08-09 08:09:48 · 188 阅读 · 0 评论 -
33. 搜索旋转排序数组
在传递给函数之前,nums 在预先未知的某个下标 k(0原创 2024-08-09 03:25:23 · 386 阅读 · 0 评论 -
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。输出:[-1,-1]输出:[-1,-1]原创 2024-08-09 03:24:32 · 189 阅读 · 0 评论 -
427. 建立四叉树
输入:grid = [[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0],[1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1],[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0]]1 对应 True,0 对应 False。输出:[[0,1],[1,1],[0,1],[1,1],[1,0],null,null,null,null,[1,0],[1,0],[1,1],[1,1]]原创 2024-06-10 09:28:11 · 801 阅读 · 0 评论 -
35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。链接:https://leetcode.cn/problems/summary-ranges。商业转载请联系官方授权,非商业转载请注明出处。输入: nums = [1,3,5,6], target = 5。输入: nums = [1,3,5,6], target = 2。输入: nums = [1,3,5,6], target = 7。请必须使用时间复杂度为 O(log n) 的算法。原创 2024-08-09 03:21:51 · 169 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值
注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …解释:原数组为 [0,1,2,4,5,6,7] ,旋转 3 次得到输入数组。解释:原数组为 [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]输入:nums = [3,4,5,1,2]原创 2024-08-09 03:20:50 · 149 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。链接:https://leetcode.cn/problems/summary-ranges。解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。著作权归领扣网络所有。输入:nums1 = [1,2], nums2 = [3,4]输入:nums1 = [1,3], nums2 = [2]算法的时间复杂度应该为 O(log (m+n))。解释:合并数组 = [1,2,3] ,中位数 2。原创 2024-08-09 03:19:53 · 222 阅读 · 0 评论 -
148. 排序链表
链接:https://leetcode.cn/problems/summary-ranges。你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:head = [-1,5,3,4,0]输入:head = [4,2,1,3]输出:[-1,0,3,4,5]来源:力扣(LeetCode)输出:[1,2,3,4]输入:head = []原创 2024-06-07 15:20:57 · 273 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
有序数组转换为二叉搜索树原创 2024-03-10 23:47:19 · 419 阅读 · 0 评论 -
79. 单词搜索
LC79.单词搜索原创 2024-03-10 19:27:28 · 479 阅读 · 0 评论 -
22. 括号生成
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。链接:https://leetcode.cn/problems/summary-ranges。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。来源:力扣(LeetCode)原创 2024-03-09 01:04:09 · 396 阅读 · 0 评论 -
52. N 皇后 II
n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。链接:https://leetcode.cn/problems/summary-ranges。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。解释:如上图所示,4 皇后问题存在两个不同的解法。来源:力扣(LeetCode)原创 2024-03-08 22:18:19 · 399 阅读 · 0 评论 -
39. 组合总和
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。输入:candidates = [2,3,6,7], target = 7。输入: candidates = [2,3,5], target = 8。输出: [[2,2,2,2],[2,3,3],[3,5]]输出:[[2,2,3],[7]]原创 2023-12-31 12:51:35 · 849 阅读 · 0 评论 -
46. 全排列
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列。商业转载请联系官方授权,非商业转载请注明出处。击败 68.49%使用 Python3 的用户。击败 99.09%使用 Python3 的用户。击败 5.05%使用 Python3 的用户。击败 6.89%使用 Python3 的用户。输入:nums = [1,2,3]输出:[[0,1],[1,0]]输入:nums = [0,1]原创 2023-12-31 08:58:39 · 721 阅读 · 0 评论 -
77. 组合
链接:https://leetcode.cn/problems/summary-ranges。给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。击败 79.32%使用 Python3 的用户。击败 10.09%使用 Python3 的用户。你可以按 任何顺序 返回答案。输入:n = 4, k = 2。输入:n = 1, k = 1。来源:力扣(LeetCode)原创 2023-12-24 09:05:12 · 371 阅读 · 0 评论 -
212. 单词搜索 II
输入:board = [[“o”,“a”,“a”,“n”],[“e”,“t”,“a”,“e”],[“i”,“h”,“k”,“r”],[“i”,“f”,“l”,“v”]], words = [“oath”,“pea”,“eat”,“rain”]单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。输入:board = [[“a”,“b”],[“c”,“d”]], words = [“abcb”]著作权归领扣网络所有。输出:[“eat”,“oath”]原创 2023-12-24 08:29:02 · 437 阅读 · 0 评论 -
17. 电话号码的字母组合
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。商业转载请联系官方授权,非商业转载请注明出处。击败 91.73%使用 Python3 的用户。击败 5.21%使用 Python3 的用户。输入:digits = “23”输出:[“a”,“b”,“c”]输入:digits = “2”输入:digits = “”原创 2023-12-24 08:21:09 · 403 阅读 · 0 评论 -
211. 添加与搜索单词 - 数据结构设计
链接:https://leetcode.cn/problems/summary-ranges。请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配。// 返回 False。// 返回 True。// 返回 True。// 返回 True。商业转载请联系官方授权,非商业转载请注明出处。原创 2023-11-07 07:52:58 · 145 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
[TOC](208. 实现 Trie (前缀树))原创 2023-11-02 14:39:54 · 85 阅读 · 0 评论 -
127. 单词接龙
给你两个单词 beginWord 和 endWord 和一个字典 wordList ,返回 从 beginWord 到 endWord 的 最短转换序列 中的 单词数目。字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> …注意, beginWord 不需要在 wordList 中。链接:https://leetcode.cn/problems/summary-ranges。原创 2023-10-27 12:15:13 · 91 阅读 · 0 评论 -
433. 最小基因变化
给你两个基因序列 start 和 end ,以及一个基因库 bank ,请你找出并返回能够使 start 变化为 end 所需的最少变化次数。如果无法完成此基因变化,返回 -1。另有一个基因库 bank 记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化。基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 ‘A’、‘C’、‘G’ 和 ‘T’ 之一。原创 2023-10-19 14:10:58 · 115 阅读 · 0 评论 -
909. 蛇梯棋
-1,那个蛇或梯子的目的地将会是 board[r][c]。给你一个大小为 n x n 的整数矩阵 board ,方格按从 1 到 n2 编号,编号遵循 转行交替方式 ,从左下角开始 (即,从 board[n - 1][0] 开始)每一行交替方向。举个例子,假设棋盘是 [[-1,4],[-1,3]] ,第一次移动,玩家的目标方格是 2。注意,玩家在每回合的前进过程中最多只能爬过蛇或梯子一次:就算目的地是另一条蛇或梯子的起点,玩家也 不能 继续移动。输入:board = [[-1,-1],[-1,3]]原创 2023-09-27 09:20:44 · 149 阅读 · 0 评论 -
210. 课程表 II
要学习课程 3,你应该先完成课程 1 和课程 2。输入:numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]]因此,正确的课程顺序为 [0,1]。因此,一个正确的课程顺序是 [0,1,2,3]。另一个正确的排序是 [0,2,1,3]。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1]。输入:numCourses = 2, prerequisites = [[1,0]]输出:[0,2,1,3]原创 2023-09-22 13:57:02 · 97 阅读 · 0 评论 -
207. 课程表
先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。输入:numCourses = 2, prerequisites = [[1,0],[0,1]]例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1。学习课程 1 之前,你需要完成课程 0。著作权归领扣网络所有。原创 2023-09-22 11:09:14 · 94 阅读 · 0 评论 -
399. 除法求值
输入:equations = [[“a”,“b”],[“b”,“c”],[“bc”,“cd”]], values = [1.5,2.5,5.0], queries = [[“a”,“c”],[“c”,“b”],[“bc”,“cd”],[“cd”,“bc”]]输入:equations = [[“a”,“b”],[“b”,“c”]], values = [2.0,3.0], queries = [[“a”,“c”],[“b”,“a”],[“a”,“e”],[“a”,“a”],[“x”,“x”]]原创 2023-09-20 12:07:15 · 100 阅读 · 0 评论 -
133. 克隆图
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。输入:adjList = [[2,4],[1,3],[2,4],[1,3]]给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。输出:[[2,4],[1,3],[2,4],[1,3]]节点 1 的值是 1,它有两个邻居:节点 2 和 4。节点 2 的值是 2,它有两个邻居:节点 1 和 3。节点 3 的值是 3,它有两个邻居:节点 2 和 4。节点 4 的值是 4,它有两个邻居:节点 1 和 3。原创 2023-09-20 10:08:22 · 89 阅读 · 0 评论 -
130. 被围绕的区域
输入:board = [[“X”,“X”,“X”,“X”],[“X”,“O”,“O”,“X”],[“X”,“X”,“O”,“X”],[“X”,“O”,“X”,“X”]]给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。输出:[[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[“X”,“O”,“X”,“X”]]输出:[[“X”]]原创 2023-09-19 06:00:23 · 144 阅读 · 0 评论 -
200. 岛屿数量
链接:https://leetcode.cn/problems/summary-ranges。给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。击败 78.12%使用 Python3 的用户。此外,你可以假设该网格的四条边均被水包围。来源:力扣(LeetCode)输入:grid = [输入:grid = [原创 2023-09-19 04:01:21 · 157 阅读 · 0 评论 -
98. 验证二叉搜索树
链接:https://leetcode.cn/problems/summary-ranges。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。著作权归领扣网络所有。输入:root = [5,1,4,null,null,3,6]解释:根节点的值是 5 ,但是右子节点的值是 4。击败 83.32%使用 Python 的用户。击败 86.11%使用 Python 的用户。节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。输入:root = [2,1,3]原创 2023-09-18 15:42:31 · 97 阅读 · 0 评论 -
230. 二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?链接:https://leetcode.cn/problems/summary-ranges。输入:root = [5,3,6,2,4,null,null,1], k = 3。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [3,1,4,null,2], k = 1。原创 2023-09-17 09:52:34 · 99 阅读 · 0 评论 -
530. 二叉搜索树的最小绝对差
注意:本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同。链接:https://leetcode.cn/problems/summary-ranges。给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值。输入:root = [1,0,48,null,null,12,49]击败 18.37%使用 Python 的用户。输入:root = [4,2,6,1,3]原创 2023-09-11 15:41:47 · 77 阅读 · 0 评论 -
103. 二叉树的锯齿形层序遍历
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]击败 32.49%使用 Python 的用户。击败 81.07%使用 Python 的用户。来源:力扣(LeetCode)输入:root = [1]输入:root = []原创 2023-09-11 06:21:39 · 127 阅读 · 0 评论 -
102. 二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。链接:https://leetcode.cn/problems/summary-ranges。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]击败 90.00%使用 Python 的用户。击败 67.68%使用 Python 的用户。输入:root = [1]输入:root = []原创 2023-09-11 05:29:39 · 170 阅读 · 0 评论 -
637. 二叉树的层平均值
给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11。输入:root = [3,9,20,null,null,15,7]输出:[3.00000,14.50000,11.00000]输出:[3.00000,14.50000,11.00000]输入:root = [3,9,20,15,7]因此返回 [3, 14.5, 11]。原创 2023-09-11 04:47:56 · 167 阅读 · 0 评论 -
199. 二叉树的右视图
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。链接:https://leetcode.cn/problems/summary-ranges。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入: [1,2,3,null,5,null,4]击败 54.30%使用 Python 的用户。击败 79.97%使用 Python 的用户。来源:力扣(LeetCode)输入: [1,null,3]输出: [1,3,4]原创 2023-09-10 16:44:34 · 131 阅读 · 0 评论 -
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。因为根据定义最近公共祖先节点可以为节点本身。解释:节点 5 和节点 1 的最近公共祖先是节点 3。原创 2023-09-10 16:23:27 · 159 阅读 · 0 评论