拿下技术面上传简历

给一个升序数组 nums(n = 10^5,可能含大量重复值)和目标值 target,要求返回所有不重复的数对 (i, j),i < j,满足 nums[i] + nums[j] == target。要求 O(n) 时间、O(1) 额外空间(输出本身不算)。请说明双指针为什么正确、每一步移动排除了什么,以及重复值怎么去重。

数据结构与算法图与搜索1-3 年知识点 1 个

面试官在考什么

判断候选人能不能讲出双指针的正确性论证(每一步安全排除了什么),以及去重这种细节是不是真写过、踩过坑。

双指针

回答框架 · 前两步

  1. 正确性:i 从头、j 从尾。若 nums[i] + nums[j] < target,则对当前 i 而言所有 j' < j 的和只会更小,不可能命中,所以 i 右移能一次性排除掉一整行;和大于 target 时对 j 对称地左移。
  2. 因为 i 只右移、j 只左移,各自最多走 n 步,总时间 O(n),只需两个下标,额外空间 O(1)。

还有 3 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

延伸阅读

想看这个方向的整体准备路线? 进入「数据结构与算法」方向页

同一能力域的其他题