6. Z 字形变换
6. Z 字形变换 6. Z 字形变换 ✨核心逻辑 本题采用 模拟(按行存取)+ 方向控制 的策略: 特殊边界处理:如果行数 numRows 为 1,或者字符串长度小于等于行数(即根本撑不满 Z 字形),直接返回原字符串即可。 构建行容器:创建一个长度为 numRows 的 StringBuilde
6. Z 字形变换 6. Z 字形变换 ✨核心逻辑 本题采用 模拟(按行存取)+ 方向控制 的策略: 特殊边界处理:如果行数 numRows 为 1,或者字符串长度小于等于行数(即根本撑不满 Z 字形),直接返回原字符串即可。 构建行容器:创建一个长度为 numRows 的 StringBuilde
151. 反转字符串中的单词 151. 反转字符串中的单词 ✨核心逻辑 本题要求反转字符串中单词的顺序,并处理多余的空格。这里提供两种思路: API 思路(推荐实际开发使用):直接使用 Java 提供的字符串处理方法。先用 trim() 去除首尾空格,再用正则 split("\\s+") 按一个或多
12. 整数转罗马数字 12. 整数转罗马数字 ✨核心逻辑 本题采用 贪心算法 的策略: 建立映射表:将阿拉伯数字与其对应的罗马数字符号建立一一对应的关系。除了基础的 1000(M)、500(D)、100(C) 等,必须包含减法规则的组合(如 900(CM)、400(CD)、90(XC) 等)。 按
134. 加油站 134. 加油站 ✨核心逻辑 本题使用 贪心算法 的思想,只需要一次遍历就能找到唯一的出发点: 全局判断:如果所有加油站的总油量(totalGas)小于总耗油量(totalCost),即 totalGas < 0,说明无论从哪个站点出发都无法绕行一周,直接返回 -1。 局部贪心:用
238. 除了自身以外数组的乘积 238. 除了自身以外数组的乘积 ✨核心逻辑 本题要求在 不使用除法 且 时间复杂度 O(N) 的前提下,计算出数组中每个元素除自身以外其他元素的乘积。这里提供两种解法: 思路一:左右乘积数组。分别计算出每个元素左侧所有元素的乘积(前缀积)和右侧所有元素的乘积(后缀
274. H 指数 274. H 指数 ✨核心逻辑 本题要求寻找最大的 h,使得有至少 h 篇论文的引用次数 ≥ h。由于 h 的范围在 [0, n] 之间,这里提供三种解题思路: 排序法:将引用次数升序排序。从前往后遍历,对于索引 i,剩余未遍历的文章数量 n - i 即为当前可满足的 h。如果
45. 跳跃游戏 II 45. 跳跃游戏 II ✨核心逻辑 本题采用 贪心算法 的策略,在遍历过程中维护当前能跳到的最远位置: 维护边界与最远距离:使用 end 记录当前这一步跳跃能够覆盖的边界下标,使用 maxValue 记录在遍历过程中能到达的最远下标。 单步贪心:在到达当前跳跃的边界 end
122. 买卖股票的最佳时机 II 122. 买卖股票的最佳时机 II ✨核心逻辑 本题采用 贪心算法 的策略: 拆解利润:由于不限制交易次数(且同一时间只能持有一股),我们可以把一段时间的上涨利润拆解成每天的“小利润”。比如 1 -> 2 -> 3 的总利润为 2,等同于 (2-1) + (3-2
80. 删除有序数组中的重复项 II 80. 删除有序数组中的重复项 II ✨核心逻辑 本题采用 双指针(快慢指针) 的策略: 有序数组特性:由于数组是严格递增的,因此重复的元素必然是连续相邻的。 容错上限:题目允许每个元素最多出现两次。这意味着,对于一个“新”元素,只要它与它前面相隔两个位置的元素
55. 跳跃游戏 55. 跳跃游戏 ✨核心逻辑 本题采用 贪心算法 的策略: 最大化覆盖范围:不必纠结于具体要跳几步,只需要维护一个变量 maxReach,表示当前能到达的最远位置。 遍历判断:从数组的第一个位置开始遍历。如果遍历到的当前下标 i 超出了我们目前能到达的最远位置 maxReach,说