54 归档分页
370 留言互动
4 核心专题

最近更新

算法 2022-07-25

NC127 最长公共子串

本文介绍了求解两个字符串最长公共子串(LCS)的题目,要求在长度不超过5000的字符串上实现 O(n²) 时间与空间复杂度的算法。核心思路是使用动态规划,将二维 DP 表压缩为一维数组 dp,遍历 str1 的每个字符时逆序遍历 str2,若字符相等则 dp[j+1]=dp[j]+1,否则置零。过程中记录当前最长子串的长度 maxLength 和其在 str1 中的结束位置 maxLastIndex,最终通过 substring 提取并返回对应子串。代码实现简洁,符合题目唯一解的前提。

NowCoder 阅读全文
算法 2022-07-24

NC53 删除链表的倒数第n个节点

本文介绍了在单链表中删除倒数第 n 个节点的实现思路与代码。要求空间复杂度 O(1) 且时间复杂度 O(n)。采用快慢指针(双指针)技巧:先让快指针先前进 n 步,若此时已到链表末尾则删除头节点;否则同步移动快慢指针直至快指针到达末尾,慢指针的下一个即为待删除节点,将其跳过即可。文中给出完整的 Java 实现并说明了边界条件的处理。

NowCoder 阅读全文
算法 2022-07-24

NC52 有效括号序列

本文介绍了判断仅含 '('、')'、'{'、'}'、'['、']' 六类字符的字符串是否为合法括号序列的问题,要求时间、空间复杂度均为 O(n)。核心思路是使用栈:遍历字符时,遇左括号将对应的右括号压入栈;遇右括号时检查栈顶是否匹配并弹出,若不匹配或栈为空则返回 false。遍历结束后,栈为空即为合法序列。代码实现基于 Java 的 `Stack<Character>`,通过上述方式实现了 O(n) 的解法。

NowCoder 阅读全文
算法 2022-07-24

NC3 链表中环的入口结点

本文介绍了在长度不超过 10000 的单链表中检测环并找出环入口节点的方法。要求空间 O(1)、时间 O(n)。通过快慢指针判断是否存在环,若相遇则说明有环;随后让一个指针回到链表头,与相遇点同步前进,首次相遇即为环入口。代码实现包括 `hasCycle` 用于返回相遇节点,`EntryNodeOfLoop` 返回环入口,若无环返回 null。示例演示了有环、无环以及单节点环的情况。

NowCoder 阅读全文
算法 2022-07-23

NC22 合并两个有序的数组

本文介绍了在 NowCoder 上的 NC22 题目——将有序整数数组 B 合并到已预留足够空间的有序数组 A 中,使 A 成为整体升序。要求在 A 的前 m 位已有序,B 的前 n 位已有序,且不返回新数组,只需在原 A 中完成合并。文章给出示例说明输入输出,并提供了 Java 实现:使用双指针遍历 A、B,比较取较小元素填入新建的临时数组 sorted,遍历结束后将 sorted 内容拷贝回 A,实现了在 O(m+n) 时间、O(m+n) 额外空间下的合并。

NowCoder 阅读全文
算法 2022-07-23

NC4 判断链表中是否有环

本文介绍了判断单链表是否存在环的问题,要求空间 O(1)、时间 O(n)。通过 Floyd 快慢指针法实现:若链表为空直接返回 false;否则让快指针每次走两步、慢指针走一步,若两指针相遇则说明有环,遍历至末尾仍未相遇则无环。文中提供了题目描述、示例及完整 Java 实现代码。

NowCoder 阅读全文