加载中

NowCoder

文章分类

浏览该分类下的所有文章

60 篇文章 5

922. 按奇偶排序数组 II

本文介绍了 LeetCode 922 “按奇偶排序数组 II”。题目要求将长度为偶数且奇偶数目相等的数组重新排列,使偶数位放偶数、奇数位放奇数。解法先遍历原数组分别收集偶数和奇数到两个临时数组,然后按顺序交替写回原数组的偶、奇索引位置,得到满足条件的排列。代码实现基于 Java,时间复杂度 O(n),空间复杂度 O(n)。

13. 罗马数字转整数

本文介绍了将合法罗马数字(范围1~3999)转换为整数的算法。罗马数字由 I、V、X、L、C、D、M 组成,遵循“左小右大”或特例“左小右大减”规则(IV、IX、XL、XC、CD、CM)。通过遍历字符串,比较相邻字符数值:若前值小于后值则累计负值,否则累计正值,最后加上最后一个字符的数值即可得到结果。代码实现采用映射函数 `getValue` 获取单字符数值,并在一次循环中完成计算,时间复杂度 O(n),空间 O(1)。

1507. 转变日期格式

本文介绍了 LeetCode 1507 “转变日期格式”。给定形如 “Day Month Year”(如 “20th Oct 2052”)的日期字符串,要求输出标准的 “YYYY‑MM‑DD”。文中给出实现思路:先按空格分割得到 day、month、year;利用月份数组将英文月份映射为两位数字;去除 day 中的后缀(th、st、nd、rd),并在不足两位时前补 0;最后按 year‑month‑day 顺序拼接并返回。示例代码采用 Java 实现,完整展示了字符串处理、数组遍历和格式化的具体步骤。

20.有效的括号

本文介绍了 LeetCode 第 20 题“有效的括号”。题目要求判断仅由 '('、')'、'{'、'}'、'['、']' 组成的字符串是否满足:左括号必须被相同类型的右括号闭合且顺序正确。文章给出 O(n) 时间、O(n) 空间的栈解法:遍历字符时,将左括号对应的期望右括号压入栈;遇到右括号时检查栈顶是否匹配,若不匹配或栈空则返回 false。遍历结束后栈为空即为有效。代码实现简洁,符合题目约束。

1108. IP 地址无效化

本文介绍了 LeetCode 第 1108 题 “IP 地址无效化”。给定一个合法的 IPv4 地址字符串,将其中的每个点号 “.” 替换为 “[.]”,返回处理后的新字符串。示例:`"1.1.1.1"` → `"1[.]1[.]1[.]1"`,`"255.100.50.0"` → `"255[.]100[.]50[.]0"`。解法采用遍历字符,遇到 ‘.’ 时追加 “[.]”,否则直接追加原字符,使用 `StringBuilder` 构建结果并返回。

338. 比特位计数

给定整数 n,要求计算区间 0 到 n 中每个数的二进制表示里 1 的个数,并返回长度为 n+1 的数组。示例说明了输入输出关系。解法采用动态规划:设 ans[i] 为 i 的答案,若 i 为偶数,则 ans[i]=ans[i/2](最高位为0),否则 ans[i]=ans[i‑1]+1(最高位为1),逐步填充数组即可得到最终结果。

739. 每日温度

本文介绍了 LeetCode 第 739 题 “每日温度”。给定每日气温数组,要求计算每一天后需等待多少天才会出现更高温度,若不存在则为 0。文章给出题目示例并提供基于单调栈的 O(n) 解法:遍历数组,用栈存放温度索引,当当前温度高于栈顶对应温度时弹出栈顶并记录间隔天数,最后返回结果数组。

75. 颜色分类

本文介绍了 LeetCode 75 “颜色分类”问题:给定仅含 0、1、2(分别代表红、白、蓝)的数组,要原地排序,使相同颜色相邻且顺序为红、白、蓝。核心思路是荷兰国旗算法,使用三个指针 left、i、right。遍历时若遇 0 则与 left 交换并左移两指针;遇 2 则与 right 交换并右移 right,i 不变以重新检查新元素;遇 1 则直接 i 前进。代码实现简洁,时间 O(n)、空间 O(1)。

5. 最长回文子串

本文介绍了 LeetCode 第5题“最长回文子串”。给定字符串 s,要求找出其中最长的回文子串。代码实现采用中心扩展法:遍历 2·len‑1 个可能的中心(包括字符本身和字符间的空隙),以 left、right 为左右指针向外扩展,只要两侧字符相等即形成回文,并实时更新最长结果。时间复杂度 O(n²),空间复杂度 O(1)。示例输入 "babad"、"cbbd"、"a"、"ac" 的输出分别为 "bab"/"aba"、"bb"、"a"、"a"。

647. 回文子串

本文介绍了 LeetCode 647 “回文子串”问题:统计字符串中所有回文子串的数量。说明了回文子串的定义及示例("abc" → 3,"aaa" → 6),并给出 Java 实现。核心算法为中心扩展法,遍历 2·n‑1 个可能的中心,对每个中心向左右扩展,只要左右字符相等即计数,最终返回总数。代码简洁高效,时间复杂度 O(n²),空间复杂度 O(1)。

322. 零钱兑换

本文介绍了 LeetCode 322 “零钱兑换”问题的求解思路。给定硬币面额数组和目标金额,要求返回凑成该金额的最少硬币数,若不可达返回 -1。代码实现采用自底向上的动态规划:用一个长度为 amount+1 的数组 target 保存每个子金额的最优硬币数,初始值设为 amount+1(视为不可达),target[0]=0。遍历所有金额 i,针对每枚硬币 coin 若 i-coin≥0,则更新 target[i]=min(target[i], target[i-coin]+1)。最终若 target[amount]仍为初始值则返回 -1,否则返回其值。示例演示了不同输入的输出结果。

1324.竖直打印单词

本文介绍了 LeetCode 1324 “竖直打印单词”的实现思路与代码。首先将输入字符串按空格分割成单词数组,遍历求得最长单词长度。随后按行(从第 0 行到最长长度‑1)构建每列字符串:若当前单词在该行有字符则取出,否则补空格。构建完毕后,去除每行末尾的多余空格,最终返回去尾空格的字符串列表。文中给出多个示例输入及对应的竖直输出,并提供完整的 Java 实现。