- 博客(72)
- 收藏
- 关注
原创 191. 位1的个数
编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被称为。会安全地进行 32 次迭代,不会陷入死循环。所以我们依然能正确统计 1 的个数!
2025-06-19 22:03:53
158
原创 171. Excel 表列序号
从左往右,每一位表示一个权重值,类似 26 进制。没有“0”,也没有“26位是 Z+1”这种规则。,表示 Excel 表格中的列名称。,但权重是以 26 为底的。该列名称对应的列序号。
2025-06-18 22:05:34
319
原创 160. 相交链表
请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回。让两个指针分别遍历两个链表,当指针走到链表末尾时,跳到另一个链表的开头。这样两人走的总路程是一样的(a + c + b + c)如果没有相交节点,最终两个指针都走到 null。如果有相交节点,最终会在相交处相遇;每个指针最多遍历两个链表长度。当他们第二次相遇的时候,就是。给你两个单链表的头节点。
2025-06-18 21:52:23
175
原创 145. 二叉树的后序遍历
后序遍历【左子树】 → 【右子树】 → 【根节点】这意味着:对每一个子树,先递归访问它的左子树,然后递归访问它的右子树,最后才处理该子树的根节点。
2025-06-16 21:42:35
337
原创 141. 环形链表
指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。去记录所有访问过的节点(虽然也能做),因为它额外用了。来表示链表尾连接到链表中的位置(索引从 0 开始)。如果链表中有某个节点,可以通过连续跟踪。,就像赛道上跑步,快的迟早会追上慢的。仅仅是为了标识链表的实际情况。(链表尾),说明链表是无环的。,判断链表中是否有环。给你一个链表的头节点。
2025-06-15 20:02:31
255
原创 136. 只出现一次的数字
除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。那么我们把数组里所有数字都异或一遍,成对的数会变成 0,最终结果就是那个。由于所有数都出现两次,它们“配对异或”之后变成了。只用了一个整型变量,不管数组多大。,只出现一次的那个数字会被留下。(任何数和0异或还是它本身)出现了一次,结果应该返回。,把所有数都异或到一个变量。因为你只遍历了一次数组。(任何数和自己异或为0),就是我们想找的答案!
2025-06-15 19:47:12
444
原创 125. 验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个。判断是否正着读和反着读一致(是回文)→ ✅。过滤掉空格、标点,只保留字母数字 →。,说明每一对字符都匹配 → ✅ 是回文。判断是否是有效字符(字母或数字)。(从两端往中间走)判断字符是否一致。字母和数字都属于字母数字字符。→ 转成小写后也等,继续。判断一个字符串是否是。
2025-06-15 19:23:50
380
原创 121. 买卖股票的最佳时机
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。你只能买一次、卖一次(而且买入在前,卖出在后)。如果价格一直下降(没法盈利),返回。:O(1)(只用了常数变量)买入这只股票,并选择在。用当前价格减去历史最低价。:O(n)(只遍历一次)和最大利润比较,更新。
2025-04-26 16:24:48
819
原创 119. 杨辉三角 II
O(rowIndex2)O(rowIndex^2)O(rowIndex2)(两层循环):O(rowIndex)O(rowIndex)O(rowIndex)(只用一个数组)在「杨辉三角」中,每个数是它左上方和右上方的数的和。因为从后往前,所以不会覆盖前面需要用的数字。中间的数字 = 上一行的相邻两个数字之和。不断推导下一行,一直推到第。第 1 行:扩展一位 ->第 2 行:扩展一位 ->第 3 行:扩展一位 ->,返回「杨辉三角」的第。每次扩展一位,比如变。
2025-04-26 15:42:15
451
原创 118. 杨辉三角
时间复杂度:O(numRows²),因为每一行最多要填 numRows 个数;中间的元素 = 上一行左上角 + 右上角的两个数字之和。在「杨辉三角」中,每个数是它左上方和右上方的数的和。空间复杂度:O(numRows²),存储所有值。生成「杨辉三角」的前 numRows。每一行的第一个和最后一个元素是 1;给定一个非负整数 numRows。
2025-04-24 22:04:21
409
原创 111. 二叉树的最小深度
最小深度 =从根节点到最近的叶子节点的路径上的节点数。叶子节点:左右子节点都为空的节点。最小深度路径:只要找到第一个叶子节点即可停止,不需要遍历所有。
2025-04-24 21:39:16
496
原创 108. 将有序数组转换为二叉搜索树
取决于树的高度,平衡 BST 的高度是 log 级别。左半部分递归构建左子树,右半部分递归构建右子树。排列,请你将其转换为一棵 平衡 二叉搜索树。→ 任意一个节点的左右子树高度差不超过 1。找到当前数组的“中间元素”,作为根节点。→ 所以中间的元素最适合做根节点。构建完就得到一棵平衡的 BST。每个元素都恰好被访问一次。
2025-04-22 22:25:34
195
原创 104. 二叉树的最大深度
O(h),其中 h 是树的高度,也就是递归栈的深度,最坏情况是 O(n)(退化成链表),最优情况是 O(log n)(完全平衡树)。O(n),其中 n 是树的节点数,我们每个节点只访问一次。是指从根节点到最远叶子节点的最长路径上的节点数。然后 +1(因为要加上当前的根节点)分别求左子树和右子树的最大深度。取这两个深度的最大值。
2025-04-21 22:38:52
319
原创 101. 对称二叉树
O(n),n 是节点数,遍历了整棵树。:O(h),h 是树的高度,用于递归栈。左子树的左边 == 右子树的右边。左子树的右边 == 右子树的左边。给你一个二叉树的根节点。, 检查它是否轴对称。
2025-04-20 15:54:53
280
原创 100. 相同的树
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。,其中 h 是树的高度,递归使用的系统栈空间最多为树的高度。,其中 n 是树中节点的个数。我们访问每个节点一次。,编写一个函数来检验这两棵树是否相同。对两个二叉树的根节点。递归地比较它们的左子树和右子树。(空),说明结构一致,返回。两个节点的值不相同,返回。给你两棵二叉树的根节点。,说明结构不同,返回。
2025-04-20 15:03:56
330
原创 94. 二叉树的中序遍历
空间复杂度 = 递归调用栈 O(h) + 结果数组 O(n)O(n)总体空间复杂度(不论递归深度如何,最终结果数组都要 O(n))
2025-04-19 13:52:39
886
原创 88. 合并两个有序数组
最终,合并后数组不应由函数返回,而是存储在数组。因为如果从前往后合并,就可能要不断移动。最后的空位,不需要移动元素,效率高!的末尾(整体数组的最后一个位置);个元素表示应合并的元素,后。中,使合并后的数组同样按。的元素来腾位置,非常低效。而从后往前,我们利用。:O(1)(原地修改),然后相应指针前移;
2025-04-19 13:44:41
468
原创 83. 删除排序链表中的重复元素
删除所有重复的元素,使每个元素只出现一次。:链表是升序排列的,重复元素一定在一起。给定一个已排序的链表的头。一直重复这个过程直到。
2025-04-19 13:09:56
557
原创 69. x 的平方根
要计算非负整数 x 的算术平方根并返回整数部分,可以使用二分查找法。核心思想是在可能的范围内(0 到 x)找到最大的整数 mid,使得 mid² ≤ x。通过不断缩小搜索范围,最终得到结果。:左边界 left 设为 0,右边界 right 设为 x。比较 mid² 与 x 的大小,调整边界以缩小范围。:循环结束时,right 即为所求的整数平方根。:O(log x),二分查找每次将范围缩小一半。不允许使用任何内置指数函数和算符,例如。由于返回类型是整数,结果只保留。:O(1),仅使用常数空间。
2025-04-17 21:20:49
315
原创 67. 二进制求和
O(max(M, N)),其中 M 和 N 分别为字符串 a 和 b 的长度。需要遍历两个字符串的全部位数。:O(max(M, N)),存储结果的字符串长度最多为 max(M, N) + 1(进位情况):计算结果按低位到高位顺序生成,需反转得到最终结果。:每位相加结果可能产生进位,需保存至下一位计算。:当两字符串长度不同时,短字符串高位视为0。,以二进制字符串的形式返回它们的和。:二进制加法从最低位(右端)开始计算。给你两个二进制字符串。
2025-04-17 20:56:06
189
原创 40. 组合总和 II
索引,确保在递归中不会重复选择已经选过的数字。同时,为了防止相同组合出现,我们在递归过程中要跳过重复的数字。: 我们使用递归来探索所有可能的组合。在每次递归时,选择当前数字,并将目标。减为 0,说明找到了一组解,将其加入结果列表;否则继续递归寻找下一个数字。在每一层递归中,为了保证每个数字只使用一次,我们通过维护一个。,则无需继续递归,因为数组是排序的,后续数字只会更大。数组进行排序,便于后续剪枝以及避免重复组合的产生。中的每个数字在每个组合中只能使用。解集不能包含重复的组合。: 如果当前数字大于目标。
2024-10-16 20:21:58
677
原创 39. 组合总和
则继续递归地尝试加入更多的元素。每次递归时,我们可以选择继续加入相同的元素(因为元素可以重复使用)。数组的每一个元素开始,尝试将当前元素加入组合中。如果当前组合的和等于。进行排序,这样做的目的是为了在递归过程中提前剪枝,避免不必要的递归。时,直接停止递归(因为后续的数字只会使得和更大),并回溯到上一层。如果至少一个数字的被选数量不同,则两种组合是不同的。,则将该组合加入结果集。如果当前组合的和小于。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。: 使用回溯的方法,从。
2024-10-16 20:19:22
487
原创 38. 外观数列
外观数列”是一个通过递归生成的序列,序列中的每一项是对前一项的描述。具体的描述方式类似于行程长度编码(RLE),即按字符连续重复的次数来描述每一位。(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。为了生成第 n 个元素,我们需要从第 1 项开始,逐步构造后续项。第 1 项为 "1",后续每一项由对前一项进行“描述”得到。因此压缩后字符串变为。
2024-10-15 22:54:44
583
原创 35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为。
2024-10-13 19:53:37
318
原创 34. 在排序数组中查找元素的第一个和最后一个位置
请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。你必须设计并实现时间复杂度为。如果数组中不存在目标值。
2024-10-12 22:21:30
602
原创 33. 搜索旋转排序数组
的算法来解决旋转数组的问题。,则返回它的下标,否则返回。你必须设计一个时间复杂度为。按升序排列,数组中的值。在预先未知的某个下标。
2024-10-12 22:18:11
440
原创 32. 最长有效括号
栈方法:使用栈来保存括号索引,时间复杂度 O(n),空间复杂度 O(n)。动态规划:通过动态规划记录每个位置的最长有效括号子串长度,时间复杂度 O(n),空间复杂度 O(n)。双指针法:通过两个计数器进行左右两次扫描,时间复杂度 O(n),空间复杂度 O(1)。
2024-10-11 22:09:52
869
原创 31. 下一个排列
的下一个字典序排列,这意味着要找到比当前排列大的下一个可能排列,如果不存在更大的排列,则返回字典序最小的排列。字典序排列类似于词典中的单词顺序。就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的。就是将其所有成员以序列或线性顺序排列。修改,只允许使用额外常数空间。
2024-10-11 22:00:53
596
原创 30. 串联所有单词的子串
中每个字符串的出现次数,并在检查每个子串时,对其进行匹配。中的所有字符串组成,并且每个子串中的字符串都必须是。中的元素,且每个元素只能使用一次。中的所有“串联子串”,这些子串由字符串数组。中的所有字符串,我们可以使用一个哈希表记录。中所有字符串以任意顺序排列连接起来的子串。:我们可以通过滑动窗口的方式遍历字符串。的子串,判断该子串是否由。:为了判断一个子串是否包含。中每个字符串的长度乘以。这个问题要求找到字符串。:每个子串的总长度是。中的字符串拼接而成。,则直接返回空列表。
2024-10-10 22:48:13
641
原创 29. 两数相除
整数除法应该向零截断,也就是截去(有符号整数,其数值范围是。乘法、除法和取余运算。假设我们的环境只能存储。给你两个整数,被除数。
2024-10-10 22:40:47
376
原创 28. 找出字符串中第一个匹配项的下标
KMP 的详细实现可以在需要优化效率的情况下考虑。它的核心是通过构建部分匹配表来减少不必要的重复匹配,使得时间复杂度能达到 O(n)。KMP(Knuth-Morris-Pratt)算法通过提前计算出匹配失败时应该从哪里继续匹配,避免重复的匹配过程。字符串的第一个匹配项的下标(下标从 0 开始)。字符串的第一个出现位置。KMP 方法的时间复杂度为。方法一:暴力匹配实现。
2024-10-09 21:48:52
944
原创 27. 移除元素
/ 它以不等于 val 的值排序。// 长度正确的预期答案。// 排序 nums 的前 k 个元素。通过这样的方式,我们可以原地修改数组并将等于。一个指针遍历整个数组,另一个指针记录不等于。元素的顺序可能发生改变。如果所有的断言都通过,你的解决方案将会。为了解决这个问题,我们可以使用。
2024-10-09 21:44:29
562
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人