- 博客(78)
- 收藏
- 关注
原创 leetcode_二叉树 230. 二叉搜索树中第 K 小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。
2025-04-21 00:51:27
399
原创 leetcode_数组 56. 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。时间复杂度:O(n log n),主要由排序决定。空间复杂度:O(n),存储合并后的区间。
2025-04-06 23:18:25
247
原创 leetcode_字符串 438. 找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。示例 1:输入: s = “cbaebabacd”, p = “abc”输出: [0,6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。
2025-04-02 17:37:19
322
原创 leetcode_字符串 3. 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。当发现重复时,左指针用于收缩窗口(排除重复字符)考虑使用集合或哈希表来存储窗口内的字符。需要一个高效的方式来判断字符是否重复。右指针通常用于扩展窗口(探索新字符)左边界和右边界可以动态调整。窗口代表当前考虑的子串。
2025-03-27 23:17:17
269
原创 leetcode_双指针 15.三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!2). 在内层循环中,使用双指针法在 nums[i+1:] 中寻找另外两个数 nums[j] 和 nums[k],使得 nums[i] + nums[j] + nums[k] == 0。1). 在外层循环中,如果 nums[i] 和前一个数相同(即 nums[i] == nums[i-1]),则跳过,避免重复。时间复杂度:排序: O(nlogn), 双重循环遍历: O(n^2)
2025-03-23 23:20:14
377
原创 leetcode_双指针 11. 盛最多水的容器
给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。
2025-03-21 17:20:45
274
原创 leetcode_数组 128. 最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
2025-03-13 22:35:45
279
原创 leetcode_字符串 49. 字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
2025-03-12 22:09:21
414
原创 leetcode_字典树 208. 实现 Trie (前缀树)
Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false。
2025-03-04 16:22:23
740
原创 leetcode_字典树 140. 单词拆分 II
输入:s = “pineapplepenapple”, wordDict = [“apple”,“pen”,“applepen”,“pine”,“pineapple”]输入:s = “catsanddog”, wordDict = [“cat”,“cats”,“and”,“sand”,“dog”]输入:s = “catsandog”, wordDict = [“cats”,“dog”,“sand”,“and”,“cat”]输出:[“cats and dog”,“cat sand dog”]
2025-03-03 16:52:15
391
原创 leetcode_字典树 139. 单词拆分
对于每个位置i,需要检查所有可能的分割点 j(0 <= j < i),检查 s[j:i] 是否在字典中,并且 dp[j] 是否为 true。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。需计算 dp[len(s)],即整个字符串 s 是否可以被拼接。设dp[i]表示字符串s的前 i 个字符(即 s[0:i])如果存在这样的j,则 dp[i] = true。
2025-03-01 23:04:23
278
原创 leetcode_动态规划/递归 279**. 完全平方数
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
2025-02-28 23:00:51
411
原创 leetcode_动态规划/递归 53. 最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个。
2025-02-26 18:06:59
330
原创 leetcode_动态规划/递归 70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
2025-02-24 17:17:46
363
原创 leetcode_位运算 231.2的幂
给你一个整数n,请你判断该整数是否是 2 的幂次方。如果是,返回 true;否则,返回 false。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
2025-02-22 17:20:19
272
原创 leetcode_位运算 190.颠倒二进制位
result = result << 1 = 0 << 1 = 0(将 result 左移一位,为下一位腾出空间)提取最低有效位:num & 1 = 0(最低位是 0)提取最低有效位:num & 1 = 0(最低位是 0)提取最低有效位:num & 1 = 1(最低位是 1)提取最低有效位:num & 1 = 1(最低位是 1)提取最低有效位:num & 1 = 1(最低位是 1)提取最低有效位:num & 1 = 0(最低位是 0)(继续这个过程直到处理完所有 32 位)
2025-02-20 23:01:26
1103
原创 leetcode_二叉树 617.合并二叉树
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。给你两棵二叉树: root1 和 root2。注意: 合并过程必须从两个树的根节点开始。返回合并后的二叉树。
2025-02-18 11:41:55
227
原创 leetcode_二叉树 543.二叉树的直径
给你一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点 root。两节点之间路径的长度由它们之间边数表示。
2025-02-17 15:14:36
535
原创 leetcode_二叉树 530. 二叉搜索树的最小绝对差
给你一个的根节点 root ,返回 树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。关键点: 由于二叉搜索树的性质,中序遍历后得到的序列是已排序的,因此可以直接计算相邻节点的最小差异。
2025-02-16 19:19:22
241
原创 leetcode_二叉树 404.左叶子之和
空间复杂度: 队列中最多存储一层的节点,因此空间复杂度为 O(m),其中 m 是二叉树的最大宽度(即某一层的最大节点数)时间复杂度: 时间复杂度为 O(n),n 是节点数。
2025-02-15 21:11:43
281
原创 leetcode_二叉树 111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。
2025-02-13 19:56:38
227
原创 leetcode_深度搜索和广度搜索 116. 填充每个节点的下一个右侧节点指针
对于完美二叉树,可以利用每一层的节点之间的连接关系:其左子节点的 next 应该指向右子节点,右子节点的 next 指向它的兄弟节点的 next(如果有的话)。
2025-02-12 23:02:13
315
原创 leetcode_深度搜索和广度搜索 112. 路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。如果存在,返回 true;否则,返回 false。叶子节点 是指没有子节点的节点。
2025-02-10 19:33:41
721
原创 leetcode_深度搜索和广度搜索 104. 二叉树的最大深度
时间复杂度: O(n), n为节点个数。空间复杂度: O(h), h为树的高度。
2025-02-09 17:49:36
252
原创 leetcode_深度搜索和广度搜索 100. 相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两棵树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
2025-02-08 21:35:38
271
原创 leetcode_双指针 541. 反转字符串 II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
2025-02-07 19:09:37
358
原创 leetcode_双指针 125.验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是回文串 ,返回 true;否则,返回 false。
2025-02-06 21:10:30
435
原创 leetcode_双指针 344.反转字符串
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。思路: 如要实现原地修改, 可利用双指针。
2025-02-06 18:40:13
321
原创 leetcode_双指针 160.相交链表
假设::链表 A 长度为 m,即 headA 到 null 的长度。也就是说,两个指针在同时走过 a + b + c 步时,同时到达相交点,最终两个指针走过的总步数都是:m + n = (a + c) + (b + c) = a + b + 2c。由于两者的步数完全相同,它们一定会在第二轮遍历的 c 步处相遇,也就是相交点,反之如果遍历两边后两指针都不相遇,说明不存在交点。headA 到交点的距离为 a,即 m = a + c。headB 到交点的距离为 b,即 n = b + c。
2025-02-05 22:05:07
576
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅