本文介绍了“NC54 三数之和”算法题:在长度≤3000、数值绝对值≤100的数组中找出所有满足 a+b+c=0 的不重复三元组。要求时间复杂度 O(n²),空间复杂度 O(n²)。解法先对数组排序,利用双指针在固定第一个元素后搜索剩余两数,遇到和为0时记录并跳过重复值,和小于0时左指针右移,和大于0时右指针左移。代码实现基于 Java,包含输入检查、去重逻辑和结果收集,能够正确返回示例中的结果。

本文介绍了在长度不超过5000的两个字符串中寻找唯一最长公共子串的问题,要求时间、空间均为 O(n²)。示例输入 "1AB2345CD" 与 "12345EF" 输出 "2345"。解法采用动态规划:使用一维 dp 数组逆序遍历第二个字符串,若对应字符相等则 dp[j+1]=dp[j]+1,否则置为 0;在遍历过程中记录最长子串的长度和其在第一个字符串中的结束位置,遍历结束后通过 substring 截取并返回该子串。文中给出完整的 Java 实现,满足题目约束。

本文介绍了在单链表中删除倒数第 n 个节点的实现方法。题目要求在 O(n) 时间、O(1) 额外空间内完成,且 n 必定有效。解法采用双指针:先让快指针先走 n 步,若此时已到链表末尾则直接删除头节点;否则快慢指针同步移动,直至快指针到达末尾,慢指针即指向待删除节点的前驱,修改指针跳过该节点即可。代码给出 Java 实现,涵盖空链表、n 为0、链表长度不足等边界情况。

给定仅含 '('、')'、'{'、'}'、'['、']' 的字符串,判断其是否为合法括号序列,即每种左括号必须按正确顺序匹配相应右括号。要求时间复杂度 O(n)、空间复杂度 O(n)。解法使用栈:遍历字符,遇左括号时将对应的期望右括号压栈,遇右括号时检查栈顶是否相同并弹出;若不匹配或栈为空则返回 false。遍历结束后,栈为空则序列合法。代码实现简洁,满足题目约束。

本文介绍了在长度不超过 10000 的单链表中,若存在环如何在 O(1) 额外空间、O(n) 时间内找出环的入口结点。题目输入分为链表非环段和环段,后台会据此构造有环或无环链表。解决思路采用快慢指针:先用两指针遍历检测环并得到相遇节点;若不存在环返回 null;若存在环,将一指针重新指向表头,随后两指针同步移动,首次相遇即为环入口。文中给出 Java 实现代码,展示了 `hasCycle` 检测环及 `EntryNodeOfLoop` 求入口的完整过程。

本文介绍了 NC22 “合并两个有序的数组” 题目:给定已排序的整数数组 A(长度 m)和 B(长度 n),A 预留 m+n 空间,要求在不返回新数组的情况下将 B 合并到 A 中,使 A 仍保持升序。说明了输入输出示例、约束条件(0≤n,m≤100,元素绝对值≤100)以及实现思路:使用双指针遍历 A、B,将较小元素依次写入临时数组 sorted,遍历结束后将 sorted 内容拷贝回 A。文中提供了完整的 Java 实现代码。