随着今年研究生考试脚步的临近,同学们想必此时都处于如火如荼的冲刺状态中。希望接下来介绍的数据结构答题技巧能够为正在备考的你助一臂之力。
很多同学都觉得算法设计题比较难,如果题目中不要求最优时间复杂度和空间复杂度还好,这样就可以不用考虑最优效率去解决问题。可是题目中往往会对时间性能以及空间性能有要求,导致很多同学无从下手,没有解题思路。其实有的时候,我们可以根据题目中的描述去判断题意,从而找到解题思路。比如,我们看如下一道题:
用单链表保存m个整数,结点的结构为:
,且
data
≤n(n为正整数)。现要求设计一个时间复杂度尽可能高效的算法,对于链表中data的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。例如,若给定的单链表head如下:
请回答下列问题。(15分)
(1)给出算法的基本设计思想。
(2)使用C或C++语言,给出单链表结点的数据类型定义。
(3)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
(4)说明你所设计算法的时间复杂度和空间复杂度。
同学们可以看一下题干中“现要求设计一个时间复杂度尽可能高效的算法”这句话,和我们平时做题中遇到的描述是有一些不同的,我们在做其他算法设计题的过程中,更多的是遇到“现要求设计一个时间复杂度和空间复杂度尽可能高效的算法”或者是“现要求设计一个性能尽可能高效的算法”。所以该题中的描述是遗漏了空间复杂度这个性能要求吗,并不是,对于本道题出题人只要求时间复杂度是另有用意的,因为本道题的解决办法是采用空间换取时间的策略,开辟一个n+1长的辅助数组用来记录链表中已出现的数值,从而只需对链表进行一趟扫描。所以同学们在做题时,需要细心