自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 【动态规划】LeetCode-62. 不同路径

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。注意,对于第一行 dp[0][j],或者第一列 dp[i][0],由于都是在边界,所以只能为 1。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。动态方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]我们令 dp[i][j] 是到达 i, j 最多路径。问总共有多少条不同的路径?

2024-01-26 17:23:08 404

原创 【动态规划】LeetCode-42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。时间复杂度:O(n)空间复杂度:O(n)

2024-01-12 15:42:34 535

原创 【栈】LeetCode-32. 最长有效括号

给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。时间复杂度:O(n)空间复杂度:O(n)

2024-01-04 08:38:17 500 1

原创 【动态规划】LeetCode-10. 正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。时间复杂度:O(mn)空间复杂度:O(mn)

2024-01-03 15:01:25 495

原创 【字典树Trie】LeetCode-208. 实现 Trie (前缀树)

boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true;boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);空间复杂度:O(T * Σ) 其中 ∣T∣ 为所有插入字符串的长度之和,Σ 为字符集的大小,本题 Σ=26。void insert(String word) 向前缀树中插入字符串 word。Trie() 初始化前缀树对象。

2024-01-02 15:47:33 763

原创 【字典树Trie】LeetCode-139. 单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。时间复杂度:O(n2)空间复杂度:O(n)

2024-01-02 14:34:36 549

原创 【Manacher】LeetCode-5. 最长回文子串

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。给你一个字符串 s,找到 s 中最长的回文子串。数据范围比较小可以直接用迭代。时间复杂度:O(n2)空间复杂度:O(1)

2024-01-02 10:29:42 545

原创 【Manacher】LeetCode-647. 回文子串

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。子字符串 是字符串中的由连续字符组成的一个序列。回文字符串 是正着读和倒过来读一样的字符串。数据范围比较小可以直接用迭代。时间复杂度:O(n2)空间复杂度:O(1)

2024-01-02 09:39:02 328

原创 【排序算法】LeetCode-347. 前 K 个高频元素

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。时间复杂度:O(nlogk)空间复杂度:O(n)

2024-01-02 09:32:34 448

原创 【递归 &回溯】LeetCode-301. 删除无效的括号

给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。时间复杂度:O(2^n * n)满足有效括号序列的性质。空间复杂度:O(n)

2023-12-28 13:41:29 481

原创 【排序算法】LeetCode-215. 数组中的第K个最大元素

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。时间复杂度:O(nlogn)快选 – 快排 + 选择。空间复杂度:O(1)

2023-12-28 13:35:53 378

原创 【排序算法】LeetCode-56. 合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。时间复杂度:O(nlogn)空间复杂度:O(n)

2023-12-28 11:01:15 833

原创 【分治】53. 最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。时间复杂度:O(n)空间复杂度:O(1)

2023-12-27 09:16:05 395

原创 【深度优先搜索 DFS】236. 二叉树的最近公共祖先

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。直接拿本身这个函数进行递归,本身这个函数的含义是在root这棵树找到p和q的最近公共祖先。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。时间复杂度:O(n)空间复杂度:O(n)

2023-12-21 10:11:34 348

原创 【宽度优先搜索 BFS】LeetCode-200. 岛屿数量

用dfs枚举整个地图,若当前位置是 1,则把这个位置赋值为 0,然后遍历上下左右四个方向,将所有为1的地方赋值为 0,当这块岛屿已经遍历完,则 答案加1。给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。时间复杂度:O(nm)空间复杂度:O(nm)

2023-12-21 09:34:05 355

原创 【宽度优先搜索 BFS】LeetCode-617. 合并二叉树

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。给你两棵二叉树: root1 和 root2。注意: 合并过程必须从两个树的根节点开始。时间复杂度:O(n + m)返回合并后的二叉树。空间复杂度:O(1)

2023-12-21 08:59:06 334

原创 【递归 &回溯】LeetCode-226. 翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。每次递归交换左右子树即可。遇到空节点返回空节点。时间复杂度:O(n)空间复杂度:O(n)

2023-12-20 15:14:56 424

原创 【递归 &回溯】LeetCode-79. 单词搜索

从单词矩阵中枚举每个单词的起点,从该起点出发往四周dfs搜索目标单词,并记录当前枚举到第几个单词,若当前搜索到的位置(i,j)的元素恰好是word单词第depth个字符,则继续dfs搜索,直到depth到最后一个字符则表示有了符合的方案,返回true。给定一个 m x n 二维字符网格 board 和一个字符串单词 word。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。注意:搜索过的位置继续搜索下一层时,需要对当前位置进行标识,表示已经搜索。

2023-12-20 10:50:19 411

原创 【递归 &回溯】LeetCode-39. 组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。candidates 中的 同一个 数字可以 无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。递归枚举,依次以每个点为起点枚举,每个点可以有一个或者多个,直到和大于等于target返回。对于给定的输入,保证和为 target 的不同组合数少于 150 个。空间复杂度:O(target)

2023-12-20 10:24:00 378

原创 【递归 &回溯】LeetCode-22. 括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。时间复杂度:O(Cn/2n)空间复杂度:O(m + n)满足有效括号序列的性质。

2023-12-20 10:00:10 368

原创 【递归 &回溯】LeetCode-17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。时间复杂度:O(3^m * 4^n)空间复杂度:O(m + n)

2023-12-20 09:46:25 429

原创 【二分】LeetCode-34. 在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]输入:nums = [], target = 0输出:[-1,-1]

2023-12-20 09:29:42 357

原创 【贪心】LeetCode-33. 搜索旋转排序数组

在传递给函数之前,nums 在预先未知的某个下标 k(0

2023-12-19 18:08:40 395

原创 【递归 &回溯】LeetCode-78. 子集

给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。由于每个数有选和不选两种情况,因此总共有。表示所有的情况,在某种情况。时间复杂度:O(2^n)空间复杂度:O(n)

2023-12-19 18:07:56 378

原创 【递归 &回溯】LeetCode-46. 全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列。你可以 按任意顺序 返回答案。时间复杂度:O(n * n!空间复杂度:O(n2)(DFS + 回溯)

2023-12-19 17:25:01 420

原创 【贪心】LeetCode-33. 搜索旋转排序数组

在传递给函数之前,nums 在预先未知的某个下标 k(0

2023-12-19 15:49:17 376

原创 【贪心】LeetCode-406. 根据身高重建队列

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。空间复杂度:O(logn)时间复杂度:O(n2)

2023-12-15 16:15:52 94

原创 【贪心】LeetCode-309. 买卖股票的最佳时机含冷冻期

设计一个算法计算出最大利润。给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。时间复杂度:O(n)空间复杂度:O(1)

2023-12-15 10:52:24 36

原创 【贪心】LeetCode-55. 跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true;否则,返回 false。j 为最大能到达的值, 当i > j 代表i位置不可达 返回false。时间复杂度:O(n)空间复杂度:O(1)

2023-12-14 17:14:23 126

原创 【贪心】LeetCode-122. 买卖股票的最佳时机 II

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。转换思路 i买 j 卖 等价于 i - j 每一天都买卖,那只需要每一天都操作并且是正收益的相加即为最大收益。给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。返回 你能获得的 最大 利润。时间复杂度:O(n)空间复杂度:O(1)

2023-12-14 16:52:08 65

原创 【贪心】LeetCode-714. 买卖股票的最佳时机含手续费

给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。返回获得利润的最大值。时间复杂度:O(n)空间复杂度:O(n)

2023-12-14 16:31:09 44

原创 【贪心】LeetCode-11. 盛最多水的容器

给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。时间复杂度:O(n)空间复杂度:O(1)

2023-12-11 16:24:45 97

原创 【模拟】LeetCode-48. 旋转图像

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。先主对角线翻转 再水平翻转。时间复杂度:O(n2)空间复杂度:O(n)

2023-12-11 15:17:26 134

原创 【二叉树】LeetCode-98. 验证二叉搜索树

设计一个递归函数 helper(root, lower, upper) 来递归判断,函数表示考虑以 root 为根的子树,判断子树中所有节点的值是否都在 (l,r)(l,r)(l,r) 的范围内(注意是开区间)。如果 root 节点的值 val 不在 (l,r)(l,r)(l,r) 的范围内说明不满足条件直接返回,否则我们要继续递归调用检查它的左右子树是否满足,如果都满足才说明这是一棵二叉搜索树。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。时间复杂度:O(n)空间复杂度:O(n)

2023-11-30 15:29:08 34

原创 【二叉树】LeetCode-96. 不同的二叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。假设 n 个节点存在二叉排序树的个数是 G (n),令 f(i) 为以 i 为根的二叉搜索树的个数,则。当 i 为根节点时,其左子树节点个数为 i-1 个,右子树节点为 n-i,则。综合两个公式可以得到 卡特兰数 公式。时间复杂度:O(n2)空间复杂度:O(n)

2023-11-29 16:30:03 48

原创 【二叉树】LeetCode-114. 二叉树的直径

单次执行流程中,先递归处理当前节点 u 的左右节点,得到左右子树为根时的“往下”最大路径 l 和 r,两者中的较大值 +1 即是本次执行流程的返回值(+1 的含义是在子路径基础上增加当前节点)。设计用于遍历二叉树的 DFS 函数:函数传入当前节点 u,返回以该节点为根时,方向“往下”的最大路径节点数量(注意这里是点数,而不是题目要求的边数)。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。同时,l + r 则是以当前节点 u 为路径最高点时的路径长度,用此更新全局 ans 即可。

2023-11-29 11:10:38 39

原创 【二叉树】LeetCode-114. 二叉树展开为链表

你可以使用原地算法(O(1) 额外空间)展开这棵树吗?时间复杂度:O(n)空间复杂度:O(1)

2023-11-22 10:01:11 32

原创 【二叉树】LeetCode-104. 二叉树的最大深度

深度优先算法 二叉树的最大深度即为max(l,r)+1,左子树和右子树的最大深度 l和 r。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。给定一个二叉树 root ,返回其最大深度。空间复杂度:O(height)时间复杂度:O(n)

2023-11-21 14:55:50 50

原创 【二叉树】LeetCode-102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。bfs广度优先搜索算法。时间复杂度:O(n)空间复杂度:O(n)

2023-11-21 14:48:51 23

原创 【二叉树】LeetCode-101. 对称二叉树

第一颗子树的左子树和第二颗子树的右子树互为镜像,且第一颗子树的右子树和第二颗子树的左子树互为镜像。给你一个二叉树的根节点 root , 检查它是否轴对称。递归算法很简单,你可以通过迭代算法完成吗?- 两个子树的根节点值相等;递归判断两个子树是否为镜像。时间复杂度:O(n)空间复杂度:O(n)

2023-11-21 11:04:11 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除