作为一名计算机专业考研党,在备战东华大学复试期间,我深刻体会到OJ(Online Judge)刷题对提升编程能力的重要性。去年复试前三个月,我给自己制定了"每日3题"的打卡计划,并坚持每天记录解题思路和复盘心得。这个系列记录的是第112天到114天的解题过程,主要涉及动态规划、图论和字符串处理等高频考点。
东华大学的OJ系统以题型全面、难度适中著称,特别适合作为考研复试的刷题平台。通过持续打卡训练,我不仅巩固了数据结构与算法基础,更重要的是培养了面对新题型的快速分析能力。最终在复试机试环节取得了满分成绩,这套方法也被多位学弟学妹验证有效。
提示:东华OJ的难度星级标准与LeetCode不同,三星题通常相当于力扣中等偏上难度,需要特别注意题目中的边界条件。
这道题的暴力解法时间复杂度是O(n^4),显然无法通过。我的优化思路是:
cpp复制vector<vector<int>> prefix(m+1, vector<int>(n+1, 0));
for(int i=1; i<=m; ++i)
for(int j=1; j<=n; ++j)
prefix[i][j] = matrix[i-1][j-1] + prefix[i-1][j] + prefix[i][j-1] - prefix[i-1][j-1];
踩坑记录:
这道题在标准Dijkstra算法基础上增加了路径计数需求,需要维护两个数组:
关键修改点:
python复制while heap:
d, u = heapq.heappop(heap)
if d > dist[u]: continue
for v, w in graph[u]:
if dist[v] > d + w:
dist[v] = d + w
cnt[v] = cnt[u] # 发现更短路径时重置计数
heapq.heappush(heap, (dist[v], v))
elif dist[v] == d + w:
cnt[v] += cnt[u] # 等长路径时累加计数
特别注意:
标准KMP的next数组构建可以优化:
java复制void buildNext(String pattern) {
int[] next = new int[pattern.length()];
next[0] = -1;
int i = 0, j = -1;
while (i < pattern.length() - 1) {
if (j == -1 || pattern.charAt(i) == pattern.charAt(j)) {
++i; ++j;
// 优化点:避免连续失配
if (pattern.charAt(i) != pattern.charAt(j))
next[i] = j;
else
next[i] = next[j];
} else {
j = next[j];
}
}
}
实测发现:
针对不同题型,我总结的测试策略:
动态规划题:
图论题:
字符串题:
python复制import sys
def main():
input = sys.stdin.read().split()
ptr = 0
# 在此处添加解题代码
n = int(input[ptr])
ptr +=1
if __name__ == "__main__":
main()
我的黄金分割方案:
使用Markdown表格记录典型错误:
| 题号 | 错误类型 | 错误样例 | 修正方案 |
|---|---|---|---|
| DHU1037 | 边界处理 | 矩阵全负时输出0 | 增加极值判断 |
| DHU2156 | 初始化错误 | cnt数组未初始化 | 添加cnt[start]=1 |
| DHU3089 | 优化过度 | 对短模式串使用优化KMP | 增加长度判断 |
建立按算法分类的代码片段库,例如:
code复制📂 code_lib
├── 📄 graph.py # 存Dijkstra, Floyd等模板
├── 📄 dp.py # 背包、LIS等经典问题
└── 📄 string.py # KMP、Trie等实现
每个模板都包含:
根据我和其他成功上岸同学的经验,理想的时间安排:
倒计时3个月
倒计时2个月
倒计时1个月
最后1周
这套方法让我在复试机试中遇到变形题时,能快速套用现有模板。比如最后一道二叉树题,其实就是层序遍历的变种,因为平时整理过各种遍历方式的模板,10分钟就完成了AC。