审题
相关题目的描述是十分多样的,所以我们需要将题目中的信息转化为我们能够识别的的形式。(下面提供一些角度,主要以问题的形式提出)
输入
1.什么形式的输入?(数组,链表,图?)
2.数据内容有何限制?(考虑数据内容,是因为考虑计算机编码本身可能存在的一些问题以及数据的一些运算性质)
- 是否是整型(字符串)?
- 如果是字符串,是否限定了哪些字符串?
3.是否需要考虑异常的输入?
- 一般笔试问题,不会让你对输入做太多预处理。(一些会明确说明输入数据的范围)
输出
1.格式是否符合题目要求?
- 易出现 : 多、少空格,或者换行。
- 参考文章:【精】ACM - 【ACM 基本输入输出格式】
2.数据本身(计算机表示局限性)是否存在问题?
- 超出数值范围(如:计算结果超出整型最大值)
限制条件
下面说说各个限制条件的含义。
1.时间限制
题目可能要求在一定时间复杂度范围内完成求解,这是一种提示:
(1)O(N):往往意味着该问题可以经过有限几次遍历解决问题;
(2)O(lgn):意味着你需要折半进行处理(给的数据往往有序);
(3)O(n^2): 一般是最低要求 …
2.空间限制
(1)O(1) : 只使用有限几个变量(且和数据规模无关)。
(2)O(n) : 允许对于输入进行整体复制(可以为 1n,2n,…)。
(3)O(n^2): 允许多个二维数组(形式:A[n][n])来记录关系。
(4)>O(n^2):还没有见过…
3.是否允许修改原数据结构?
leetcode上曾出现过该类限制。
题目转化
将题目转化为你易于理解的形式。