南方科技大学数据结构与算法分析课程资料
- instructor: 唐博 沈昀
- semester: 2022 FALL
lab:lab课作业的代码
lecture:理论课课件
-
对难题不用太死磕。如果lab题里面有的题实在麻烦或者做不出来(一个lab最多一个,不然可能bonus lab也不够用),一般这些题沈老师都跟大家讲清楚。建议如果没有想法就不用非得强迫自己,可以用最后的bonus lab去补这些分数。一般bonus lab里面的题目会有一些比较简单的、大部分人都可以做出来的题目。
-
课程后面的题目会很花时间,在开始写之前最好都想清楚,然后用一个比较大的整块时间一次写好。虽然对于复杂的逻辑,在写之前想清楚可能比较花时间,但是边写边想可能会导致在写的过程中代码越来越乱。
-
一个bug如果调了几个小时也没有发现问题,建议先停一段时间再看,或者问一下ta,sa或者和同学交流一下,不建议自己不停看,因为可能陷入了某种思维定式。
-
建议会写的题目都尽量早写。
- 这样的话,如果有一直de不出来的bug,可以在ddl之前一周的课上可以请sa,ta老师帮忙de,感觉线下交流的效率会比较高一些,看代码也比较方便。
- 同时,压到最后也会比较紧张,容易自己花大块时间不停debug,陷入思维定式。
-
虽然沈老师一般在讲题之前会先说一下题干大概是什么意思,但建议还是在上课之前提前先看一下,至少先读一下题,最好也先自己想一下。
- 因为后期有一些题目的题干可能有些复杂,有点时候可能不能在第一次听之后就马上理解需要实现什么功能,尤其是沈老师一般说得也比较快。
- 而且如果题干是什么意思没听懂,那一般后面的讲解也会跟不上。
-
常见问题:
-
注意答案的数据范围。long了吗?
-
注意循环中的序号使用:i, j, k。看清现在在哪一层,要用哪个,不要用错。
-
注意Java中的方法是都是值传递(pass-by-value),没有引用传递。对于对象是地址的值传递
-
不要在循环中反复开可以多次利用的数组,影响时间。
-
不要乱用arrayList中的方法。如add,在实现时会开一个更大的数组,把之前的小数组放进去,然后再加上新加入的。
-
不要多次String类字符串拼接。
-
用快读快写。
-
特殊样例:重复数字,负数,0。
-
输出的格式:是否有空格,字符请直接复制样例的输出。
-
如果数据范围给的是绝对值,考虑是否有负数。
-
递归要有base case,注意死循环。
-
有一些语句写的时候要注意顺序,可能看起来哪一句在前都可以,但实则不然。
-
- 由于有bonus lab的缘故,所以虽然平时lab花的时间比较多,但个人感觉课程分数的差距主要出在理论考试上,包括quiz,midterm还有final,所以考前一定要好好复习一下。
- 一般考试之前唐博老师会把一些前几年的题目发给大家供参考。
- quiz第一次会比较难,第二次就会相对简单。
- 个人感觉如果希望理论考试得到一个比较好的分数,同时之前没有学习过竞赛的话,最好在lab课的题目之外再自己练习一些题目。因为在理论课考试中也会有一些写代码/伪代码的题目,而且占得个人感觉也不是很少。