板子:算法题答题三段式

408 算法题固定问三件事:① 基本设计思想;② 用 C/C++ 描述算法,关键处加注释;③ 时间复杂度和空间复杂度。三问分开给分,哪一问都不能空着。

骨架

(1)基本设计思想
     第一句点出方法("采用三次逆置""用辅助数组标记""快慢指针"……),
     再用 2~3 句把步骤说清;空表、找不到之类的特殊情况顺带交代。
 
(2)算法实现
     [结构体定义:题目给了就照用,没给就先写]
     函数代码,关键步骤后面写 // 注释
 
(3)复杂度
     时间复杂度 O(…),空间复杂度 O(…)。(要和自己写的代码对得上)

完整样例见 2010 年循环左移。

拿分策略

  1. 先保底,再求优。想不出最优解就写正确的暴力解。历年评分细则都给「正确但不是最优」的解留了大部分分数,最怕的是追最优解写错,整题丢分。
  2. 按题目要求定目标:
    • 题目写「时间上尽可能高效」:只追求时间,空间可以拿来换时间(2018)。
    • 题目写「时间和空间两方面都尽可能高效」:通常要求 额外空间(2010)。
  3. 思想比代码值钱。时间不够就先把思想写完整,代码只写关键部分。
  4. 复杂度要和代码一致:写的是暴力解,就如实写暴力解的复杂度。
  5. 不调 STL 的 sort 这类函数:核心步骤直接调库,等于没写算法。
  6. 不用写头文件和 main,用 C++ 的 & 和 bool 没问题。

链接