拿下技术面上传简历

给定 n 个闭区间 [l_i, r_i],要选出尽可能多的区间,使它们两两不重叠(前一个的右端点严格小于后一个的左端点)。标准做法是按右端点 r 升序排序,然后从左到右扫,能选就选。请说明这个贪心为什么是正确的(给出证明思路,比如交换论证),并分别给出一个反例说明"按左端点排序"和"按区间长度从小到大排序"为什么是错的。

数据结构与算法动态规划与贪心校招知识点 1 个

面试官在考什么

判断候选人能不能真正证明一个贪心策略的正确性(而不是"试了几个例子都对"),以及能不能构造出正确的反例来推翻错误的贪心。

贪心证明

回答框架 · 前两步

  1. 贪心规则:所有区间按右端点升序排序,维护上一个已选区间的右端点 last(初始为 -INF),遇到 l >= last 的区间就选它并更新 last,否则跳过。
  2. 交换论证:设某个最优解里第一个区间是 A,贪心选的是右端点最小的区间 G,则 r_G <= r_A;把 A 换成 G,因为右端点更小,G 不会和最优解中剩下的区间冲突,所选的区间个数不变。

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

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

延伸阅读

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

同一能力域的其他题