本文介绍了“3数之和”问题:在长度 ≤3000、元素绝对值 ≤100 的数组中找出所有满足 a+b+c=0 的唯一三元组。要求时间、空间复杂度均为 O(n²)。解法先对数组排序,利用双指针在固定第一个元素后搜索剩余两数,并在遍历过程中通过相邻相等值跳过实现去重。代码实现了排序、首元素去重、指针移动及结果收集,能够返回如 [[-10,-10,20],[-10,0,10]] 等正确答案。

本文介绍了牛客网 NC127 “最长公共子串”题目,要求在两个长度不超过 5000 的字符串中找出唯一且存在的最长公共子串,空间与时间复杂度均为 O(n²)。给出示例输入输出后,提供了基于动态规划的 Java 实现:使用一维 dp 数组逆序遍历 str2,若字符相等则 dp[j+1]=dp[j]+1,否则置零;同时记录最长子串的长度及其在 str1 中的结束位置,最后通过 substring 截取并返回结果。该解法满足题目对空间、时间的要求。

本文介绍了在单链表中删除倒数第 n 个节点的算法。要求时间 O(n)、空间 O(1)。思路是先让指针 cur 先行 n 步,再与指针 pre 同步移动,直至 cur 到达末尾;此时 pre 指向待删除节点的前驱,直接修改 pre.next 即可。特殊情况包括 n 等于链表长度时删除头节点。文中给出完整的 Java 实现代码。

本文介绍了判断仅含 '('、')'、'{'、'}'、'['、']' 的字符串是否为合法括号序列的问题,要求 O(n) 时间、O(n) 空间。合法序列需按正确顺序闭合,如 "()"、"()[]{}";而 "(]"、"([)]" 为非法。解法利用栈:遍历字符,遇左括号时将对应的右括号压入栈,遇右括号时检查栈顶是否匹配并弹出,若不匹配或栈为空则返回 false。遍历结束后栈为空即为合法。文中给出完整的 Java 实现。

本文介绍了在单链表中寻找环入口节点的问题,要求空间 O(1)、时间 O(n)。输入分为链表前段和环段,若环段为空则无环。解法采用 Floyd 快慢指针:先遍历判断是否存在环并获取相遇节点;若不存在返回 null;若存在,将快指针移回表头,与慢指针同步前进,首次相遇即为环的入口。文中给出完整的 Java 实现代码。

本文介绍了在已分配足够空间的有序整数数组 A 中合并另一个有序数组 B 的实现思路。题目要求不返回新数组,而是直接将 B 的元素合并到 A,使 A 成为长度为 m+n 的升序数组,且 m、n 均不超过 100。文章给出两组示例说明输入输出格式,并提供 Java 参考实现:使用双指针遍历 A、B,将较小元素依次写入临时数组 sorted,遍历结束后再将 sorted 内容拷贝回 A,实现原地合并。代码核心在于边界判断(p1==m 或 p2==n)和比较 A[p1] 与 B[p2] 的大小。