拿下技术面上传简历

给定字符串 s,长度 n=5000,求最长回文子序列长度。区间 DP 转移是 s[i]==s[j] 时 dp[i][j]=dp[i+1][j-1]+2,否则 max(dp[i+1][j], dp[i][j-1])。O(n^2) 时间约 25e6 可接受,但 dp[n][n] 的 int 约 100MB,内存限制 64MB。你会怎么设计枚举顺序和滚动数组?如果还要求输出任意一个最长回文子序列,滚动数组还缺什么信息?

数据结构与算法动态规划与贪心3-5 年知识点 1 个

面试官在考什么

判断候选人是否真正理解区间 DP 的依赖方向,能否把二维状态压到线性内存,并知道压缩后会丢失什么。

区间DP

回答框架 · 前两步

  1. 按区间长度 len 从 1 到 n 枚举,i 从 0 到 n-len,j=i+len-1,保证依赖的子区间已算。
  2. 滚动压缩:只保存上一长度和上上长度两个一维数组,当前长度由它们推出,空间 O(n)。

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

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

延伸阅读

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

同一能力域的其他题