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

NC68 跳台阶

该题要求计算青蛙爬上 n 级台阶的跳法数,青蛙每次可跳 1 级或 2 级,跳法顺序不同视为不同。n 的取值在 1‒40,要求时间 O(n)、空间 O(1)。实际上跳法数等同斐波那契数列,第 n 项可由 dp[i]=dp[i‑1]+dp[i‑2] 递推得到。示例:n=2 时答案 2,n=7 时答案 21。文中给出一种基于数组的实现思路,亦可用常数空间的滚动变量进一步优化。

解决SpringBoot打成jar包无法加载resources下文件的问题

文章介绍了SpringBoot 打成 jar 包后在 Linux 环境中无法直接读取 resources 目录下文件(如 application.yml、ip2region.db)的常见问题,并提供了解决方案。核心思路是使用 Spring 提供的 PathMatchingResourcePatternResolver 获取资源对象,再通过 Apache Commons IO 的 FileUtils.copyInputStreamToFile 将资源流写入本地文件,从而实现对 jar 包内部资源的读取。文中给出完整代码示例,并列出所需的核心依赖(spring‑core 与 commons‑io),帮助开发者在部署时顺利加载 resources 中的文件。

NC76 用两个栈实现队列

本文介绍了利用两个栈实现队列的算法要求:在 O(n) 空间内完成 n 次入队(push)和 n 次出队(pop),且每次操作时间复杂度均为 O(1)。通过在 stack1 中正常入栈,出队时若 stack2 为空则将 stack1 中全部元素倒入 stack2,实现先进先出的顺序。文章提供了示例说明操作过程,并给出 Java 实现代码,展示了 push 方法向 stack1 添加元素,pop 方法在必要时转移元素后从 stack2 弹出,实现队列的基本功能。

NC33 合并两个排序的链表

本文介绍了合并两个递增链表的算法,要求时间复杂度 O(n)、空间复杂度 O(1)。给出题目描述、示例及边界情况(空链表),并提供 Java 实现。核心思路是使用两个指针遍历两链表,比较当前节点值,将较小者接到结果链表尾部,并更新相应指针;首次插入时初始化头尾指针,循环结束后将剩余非空链表直接链接到结果尾部。代码实现简洁,满足题目约束。

NC32 求平方根

本文介绍了在 O(log x) 时间、O(1) 空间复杂度约束下实现整数平方根(向下取整)的算法。通过牛顿迭代法先设初始值为 x,不断更新 res = (res + x/res)/2,直至 res ≤ x/res 为止,即得到满足 floor(√x) 的整数结果。代码实现简洁,兼顾 x 为 0 或负数的边界处理,并给出示例输入输出验证。

NC103 反转字符串

本文介绍了 NowCoder 练习题 NC103——反转字符串的实现要求。题目要求编写程序接收长度不超过 1000 的字符串,输出其逆序结果,空间复杂度 O(n),时间复杂度 O(n)。提供了两种 Java 解法:方法一通过字符数组遍历并逐位赋值实现逆序;方法二直接利用 `StringBuilder` 的 `reverse()` 方法简化实现。示例演示了输入 "abcd" 输出 "dcba",以及空字符串的处理。

NC61 两数之和

本文介绍了NowCoder “两数之和”练习:给定整数数组 numbers 和目标值 target,要求在数组中找到两数之和等于 target 的下标(从1起始),返回按升序排列的下标。数据规模为 2 ≤ len(numbers) ≤ 10⁵,要求空间复杂度 O(n) 且时间复杂度 O(n log n)。示例说明了输入输出格式。提供的Java解法采用哈希表存储已遍历元素的值及其下标,在遍历过程中查找 target - numbers[i] 是否已出现,若找到即返回对应下标+1,实现线性时间和线性空间的求解。

NC88 寻找第K大

本文介绍了 NC88 “寻找第 K 大” 的算法实现。题目要求在 O(n log n) 时间、O(1) 额外空间内,返回整数数组中第 K 大的元素(保留重复值)。示例说明了不去重的要求。提供了两种解法:① 直接使用 `Arrays.sort` 排序后取下标 `a[n‑K]`;② 利用最大堆(`PriorityQueue` 逆序)插入全部元素,弹出 K‑1 次后取堆顶。两种方法均满足题目复杂度限制。

NC15 求二叉树的层序遍历

本文介绍了二叉树层序遍历的实现。题目要求返回每层节点值的列表,节点数可达10⁵。解法采用广度优先搜索(BFS),利用队列按层级逐个弹出节点,记录当前层的节点数(queue.size),将左、右子节点依次入队,并将节点值加入本层列表。遍历结束后返回包含所有层列表的二维数组。代码实现简洁,时间复杂度 O(n),空间复杂度 O(n)。