← 返回课程路线 第五阶段 · S5-04 · 55 分钟

先写能验证的基线,再稳稳升级

这一课只练一件事:遇到一道暂时写不出满分算法的难题时,先写一份能验证的,再逐步升级,而不是一步到位地追求最优解。做法是:先用最直接的写法覆盖小数据,标注它能处理的范围和会漏掉的,再动手做,同时用确认没有引入。必会:能先写小数据可过的基线;能标注它的适用范围和已知会出错的特殊情况;能避免把破坏正确性的“捷径”当成优化。最小示例:区间求和题,q 次查询每次给出 l, r,求 a[l..r] 的和。基线写法是每次查询都从 l 循环到 r 直接累加,复杂度 O(n·q),在 n、q 都不大时能过。样例追踪:先写这份基线并用样例测试通过;标注 l > r 是空区间应输出 0、l == r 是单点区间;再引入前缀和 sum[i] = sum[i-1] + a[i],把每次查询变成 sum[r] - sum[l-1],复杂度升级为 O(n+q);升级后用基线在小数据上对拍,确认输出完全一致。边界是不能跳过基线直接想前缀和公式、也不能为了让代码“看起来更快”而删掉必要的下标或判断。建议掌握:升级前先标好基线的适用范围,升级后立刻用基线做一次对拍,而不是假设新写法一定正确。拓展:伪优化是指看起来精简了代码、实际上悄悄改变了结果的“假优化”,现在只需要能识别一个例子。这里不会在浏览器里运行 C++。

必会:能先写小数据可过的基线;能标注适用范围与特殊情况;能避免伪优化 建议掌握:升级复杂度后立刻用基线对拍,确认输出一致 拓展:识别“看起来更快、实际改变结果”的伪优化写法,不当硬门槛

任务 1:先选出该怎么开始

先确定面对一道暂时写不出满分算法的题时该先写什么,再确定写完之后该怎么标注。点不认识的词可看基础解释。

必会:能说出为什么要先写暴力基线;能说出基线写完之后要标注哪些内容。这里不会在浏览器里运行 C++,只练习选择和走过程。

区间求和题,q 次查询每次给 l、r,求 a[l..r] 的和。你还没想出前缀和,应该先做什么?先写什么 · 必会

暴力基线写完并测试通过后,应该怎么处理?标注限制 · 必会