49. 字母异位词分组

49. 字母异位词分组 49. 字母异位词分组 ✨核心逻辑 本题采用 哈希表(HashMap)与特征编码 的策略: 统一特征键:字母异位词的特点是它们包含的字母种类和数量完全一致,只是排列顺序不同。因此,我们可以为每个字符串生成一个基于字母出现次数的唯一特征键。 统计字符频率:遍历字符串的每一个字符


128. 最长连续序列

128. 最长连续序列 128. 最长连续序列 ✨核心逻辑 本题要求在 时间复杂度 O(N) 的约束下解决问题,因此不能使用常规的排序方法(排序最低也是 O(N log N))。这里采用 哈希集合(HashSet)优化查找 的策略: 去重并快速查找:将数组中的所有数字放入一个 HashSet 中。这


380. O(1) 时间插入、删除和获取随机元素

380. O(1) 时间插入、删除和获取随机元素 380. O(1) 时间插入、删除和获取随机元素 ✨核心逻辑 本题要求所有操作的时间复杂度均为 O(1),因此采用了 变长数组 + 哈希表 的组合数据结构: 数组(List)负责常数级随机访问:数组支持通过下标 O(1) 的访问,正好可以满足 get


56. 合并区间

56. 合并区间 56. 合并区间 ✨核心逻辑 本题采用 排序 + 贪心 的策略: 排序预处理:首先将所有区间按照 起始位置 进行升序排序。排序后,能够合并的区间必定是相邻的,这大大简化了后续的判断逻辑。 动态合并:使用一个结果列表 list 来存储当前合并好的区间。我们将排序后的第一个区间先放入结


228. 汇总区间

228. 汇总区间 228. 汇总区间 ✨核心逻辑 本题采用 一次遍历(双指针) 的策略: 有序数组特性:题目给定的数组是无重复元素的有序数组。这意味着如果一段数字是连续的,那么相邻元素必定满足 nums[i] + 1 == nums[i + 1]。 寻找区间:外层循环使用 i 遍历数组,在每一次外


289. 生命游戏

289. 生命游戏 289. 生命游戏 ✨核心逻辑 本题要求使用 原地算法 更新矩阵状态。由于我们修改当前细胞时,需要依赖它周围 8 个邻居在修改前的原始状态,为了防止原地覆盖导致后续细胞计算错误,本题采用了 复合状态标记法: 自定义状态定义(2位状态机): 0:当前死亡,下个状态依然死亡(保持死)


73. 矩阵置零

73. 矩阵置零 73. 矩阵置零 ✨核心逻辑 本题要求 原地 将矩阵中出现 0 的元素所在的行和列全部置为 0。这里采用 “原地标记法(利用首行首列作为标记数组)” 的策略: 前置标记:由于我们要用第一行和第一列作为标记数组,所以必须先遍历并记录第一行和第一列原本是否包含 0,防止后续遍历时的标记


48. 旋转图像

48. 旋转图像 48. 旋转图像 [此处请插入:矩阵顺时针旋转 90 度示意图 / 算法过程演示图] ✨核心逻辑 本题要求 原地 将矩阵顺时针旋转 90 度。这里采用极其经典的 “两遍扫描法”(数学变换法): 数学推导:对于矩阵中的任意坐标 (i, j),其顺时针旋转 90 度后的新位置为 (j,


54. 螺旋矩阵

54. 螺旋矩阵 54. 螺旋矩阵 ✨核心逻辑 本题采用 模拟边界收缩(按层遍历) 的策略: 定义边界:维护四个变量 top(上边界)、bottom(下边界)、left(左边界)、right(右边界),分别代表当前未遍历矩阵区域的上下左右边缘。 顺时针遍历:在 top <= bottom 且 lef


36. 有效的数独

36. 有效的数独 36. 有效的数独 ✨核心逻辑 本题采用 哈希表/布尔数组标记法 的策略: 建立标记数组:由于数独是固定的 9x9 大小,数字也是固定的 1-9。我们可以用 3 个二维布尔数组(模拟哈希集合),分别记录每一行、每一列、以及每一个 3x3 宫格内,数字 1-9 是否已经出现过。 一