单轮深入 · 面试题型

算法与编程面试练习:先讲思路,再跑用例

按编程面试的真实节奏练习:先澄清题意,讲出基础解法,再优化,最后用测试证明。技术练习室的题目可在浏览器内的 JavaScript / Python 沙盒中直接运行。

早期体验期间免费。练习在应用内进行,需要登录账号。

准备清单算法与编程

  1. 01澄清输入与边界
  2. 02哈希表、栈与双指针
  3. 03滑动窗口与堆
  4. 04复杂度与测试

下一次练习技术面试练习室

01常见题

算法与编程面试题示例

这些算法与编程面试题由 InterviewWare 编写或改编,并非任何公司的真实面试题。每道题都列出面试官关注的信号和通常随之而来的追问。

题目面试官关注什么可能的追问
R2 · 专业能力与案例
Q01 如何找到字符串中第一个不重复的字符?用计数表两次遍历,时间 O(n);在选择定长数组还是哈希表之前,先确认字符集范围。如果字符以流的形式到达、每来一个都要给出答案,你的做法要怎么变?
Q02 解释如何检测链表中是否有环,以及环的入口在哪里。先给出用集合记录访问节点的方案,再用快慢指针把空间降到 O(1),并能讲清两个指针为什么一定相遇。为什么把其中一个指针放回表头后,两者会在环的入口相遇?
Q03 判断一棵二叉树是否为合法的二叉搜索树。递归时向下传递上下界,而不是只比较父子节点;对重复值给出明确的处理规则。改成迭代写法怎么做?树严重偏斜时空间开销是多少?
Q04 给定由陆地和水组成的网格,统计岛屿数量。从每个未访问的陆地格子出发做 BFS 或 DFS 并标记已访问;对大网格要提到递归深度的问题。如果网格每次只改一个格子,怎样在不重新扫描的情况下维护岛屿数量?
Q05 返回无序数组中第 k 大的数。以排序为基础方案,再用大小为 k 的最小堆做到 O(n log k),并说明快速选择平均 O(n)、最坏情况如何。如果数组大到内存放不下,你会选哪种做法?
Q06 给定每天的价格,求只买卖一次能获得的最大利润。一次遍历并记录迄今为止的最低价;提到暴力解但不必写出来;口头验证空数组和一路下跌的情况。如果允许多次买卖,答案怎么变?

02试答一题

算法与编程面试练习:先讲清一道题的思路

从上面的题目中挑一道,先写下你的回答。在你请求反馈之前,草稿只保存在当前浏览器。

练习题 · 算法与编程

如何找到字符串中第一个不重复的字符?

0 字

获取反馈需要注册免费账号(一步完成,无需银行卡)。草稿只保存在当前浏览器,注册后自动填入;在你提交之前不会上传。

03技术练习室

可在技术练习室运行的算法题

每道题都可以在浏览器里用 JavaScript 或 Python 运行公开用例。表格列出了题目考察的解题模式,以及面试官通常期待的复杂度。

技术练习室题目
题目解题模式难度目标时间复杂度目标空间复杂度
01查找目标和哈希表简单O(n)O(n)
02有效括号栈简单O(n)O(n)
03搜索插入位置二分查找简单O(log n)O(1)
04合并有序数组双指针简单O(m + n)O(m + n)
05合并区间排序 · 区间中等O(n log n)O(n)
06字母异位词分组哈希表 · 字符串中等O(n · k log k)O(n · k)
07无重复字符的最长子串滑动窗口 · 哈希表中等O(n)O(k)
08前 K 个高频元素哈希表 · 堆 / 桶中等O(n log k)O(n)
09LRU 缓存模拟设计 · 哈希表 + 链表中等O(1)(每次操作)O(capacity)
10滑动窗口最大值单调队列 · 滑动窗口困难O(n)O(k)

打开技术练习室需要登录账号。

04答题示例

返回数组中出现频率最高的 k 个数。

编码前后该说些什么;中级岗位,口头讲解约两分钟。 示意内容:由 InterviewWare 编写,并非真实候选人的回答。

  1. 01

    澄清

    k 会不会超过不同数字的个数?结果需要排序吗?我先假设 k 合法、结果顺序不限。

  2. 02

    基础解法

    先用哈希表计数,再按次数给不同的数排序:最坏 O(n log n)。

  3. 03

    优化

    扫描计数时维护一个大小为 k 的最小堆,做到 O(n log k);按次数分桶还可以做到 O(n)。

  4. 04

    验证

    收尾前,我会跑一个频次并列的用例,以及 k 恰好等于不同数字个数的情况。

05答题建议

算法与编程面试答题要点

这样答更有效

  1. T1动手前先复述题目,确认输入规模、是否有重复、空输入以及返回值类型。
  2. T2用一句话说出暴力解和复杂度,再去优化——面试官想看到这一步是怎么走过来的。
  3. T3边写边讲,说清循环始终保持的不变量。
  4. T4说“写完了”之前,先用一个普通用例和一个边界用例手动走一遍代码。

算法与编程面试常见误区

  1. M1闷头写十分钟,面试官既帮不上忙,也看不到你的思路。
  2. M2直接默写背过的最优解,却讲不清为什么对。
  3. M3只说 O(n) 却不说明 n 指什么,或忽略哈希表占用的空间。
  4. M4只用题目给的例子测试。
  5. M5紧张时变量随手起名 a、b、tmp,写到后面自己都看不懂。

06国内求职

国内算法与编程面试怎么准备

校招更看手写,社招更看落地

校招的算法面试通常题量集中,常见的是一到两道中等难度的题,要求当场写出能运行的代码,面试官很在意你有没有先想清楚再写、能不能自己发现 bug;社招的编程题一般不会更难,但会更多地和实际工作结合,比如写完后追问“线上数据量大十倍怎么办”“这段代码你会怎么测”。无论哪种,能讲清楚和能写出来同样重要。

编程题在三轮模拟里的位置

国内技术面常见的节奏是:一面考基础加一道算法题,二面项目深挖加一道题或系统设计,三面偏综合。InterviewWare 把编程题放在 R2 专业能力与案例 这一轮:技术练习室负责写代码、跑用例,模拟面试里的 R2 负责练“讲”。R1 经历与动机、R3 判断与协作不会出算法题,但可以用来准备技术面开头的自我介绍和结尾的反问环节。

写完之后的“代码深挖”

很多面试官写完题后会顺着代码继续挖:“这里为什么用哈希表而不是排序?”“如果输入是流式的呢?”“你怎么证明它是对的?”。练习时,每写完一道题,都试着自己回答这三个问题,并且把答案说出口,而不只是在心里想一想。

07推荐工具

算法与编程面试练习工具

  1. 技术面试练习室

    在浏览器里用 JavaScript 或 Python 运行下方题目的公开用例,无需安装环境,还能保存草稿以便讨论。

    JS · Python公开用例
  2. 对话式 AI 模拟面试

    把保存的解法讲给技术面试官听,他会追问复杂度,以及你放弃了哪些备选方案。

    4 位面试官R1–R3文字 · 语音
  3. 面试口语练习

    录一段两分钟的思路讲解,看看语速或口头禅有没有影响表达。

    语速口头禅 · 停顿

更多方向

探索更多方向

早期体验 · 免费

今天,记下第一轮练习。

带上简历或岗位描述,或者只写下想要的岗位。从第一个回答开始,训练日志就会记录你的进步。