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

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


6. Z 字形变换

6. Z 字形变换 6. Z 字形变换 ✨核心逻辑 本题采用 模拟(按行存取)+ 方向控制 的策略: 特殊边界处理:如果行数 numRows 为 1,或者字符串长度小于等于行数(即根本撑不满 Z 字形),直接返回原字符串即可。 构建行容器:创建一个长度为 numRows 的 StringBuilde


151. 反转字符串中的单词

151. 反转字符串中的单词 151. 反转字符串中的单词 ✨核心逻辑 本题要求反转字符串中单词的顺序,并处理多余的空格。这里提供两种思路: API 思路(推荐实际开发使用):直接使用 Java 提供的字符串处理方法。先用 trim() 去除首尾空格,再用正则 split("\\s+") 按一个或多


12. 整数转罗马数字

12. 整数转罗马数字 12. 整数转罗马数字 ✨核心逻辑 本题采用 贪心算法 的策略: 建立映射表:将阿拉伯数字与其对应的罗马数字符号建立一一对应的关系。除了基础的 1000(M)、500(D)、100(C) 等,必须包含减法规则的组合(如 900(CM)、400(CD)、90(XC) 等)。 按


134. 加油站

134. 加油站 134. 加油站 ✨核心逻辑 本题使用 贪心算法 的思想,只需要一次遍历就能找到唯一的出发点: 全局判断:如果所有加油站的总油量(totalGas)小于总耗油量(totalCost),即 totalGas < 0,说明无论从哪个站点出发都无法绕行一周,直接返回 -1。 局部贪心:用


238. 除了自身以外数组的乘积

238. 除了自身以外数组的乘积 238. 除了自身以外数组的乘积 ✨核心逻辑 本题要求在 不使用除法 且 时间复杂度 O(N) 的前提下,计算出数组中每个元素除自身以外其他元素的乘积。这里提供两种解法: 思路一:左右乘积数组。分别计算出每个元素左侧所有元素的乘积(前缀积)和右侧所有元素的乘积(后缀


274. H 指数

274. H 指数 274. H 指数 ✨核心逻辑 本题要求寻找最大的 h,使得有至少 h 篇论文的引用次数 ≥ h。由于 h 的范围在 [0, n] 之间,这里提供三种解题思路: 排序法:将引用次数升序排序。从前往后遍历,对于索引 i,剩余未遍历的文章数量 n - i 即为当前可满足的 h。如果


45. 跳跃游戏 II

45. 跳跃游戏 II 45. 跳跃游戏 II ✨核心逻辑 本题采用 贪心算法 的策略,在遍历过程中维护当前能跳到的最远位置: 维护边界与最远距离:使用 end 记录当前这一步跳跃能够覆盖的边界下标,使用 maxValue 记录在遍历过程中能到达的最远下标。 单步贪心:在到达当前跳跃的边界 end


122. 买卖股票的最佳时机 II

122. 买卖股票的最佳时机 II 122. 买卖股票的最佳时机 II ✨核心逻辑 本题采用 贪心算法 的策略: 拆解利润:由于不限制交易次数(且同一时间只能持有一股),我们可以把一段时间的上涨利润拆解成每天的“小利润”。比如 1 -> 2 -> 3 的总利润为 2,等同于 (2-1) + (3-2


80. 删除有序数组中的重复项 II

80. 删除有序数组中的重复项 II 80. 删除有序数组中的重复项 II ✨核心逻辑 本题采用 双指针(快慢指针) 的策略: 有序数组特性:由于数组是严格递增的,因此重复的元素必然是连续相邻的。 容错上限:题目允许每个元素最多出现两次。这意味着,对于一个“新”元素,只要它与它前面相隔两个位置的元素