题型
静态链表
PTA中对链表的考察不像LeetCode,大部分时候的考察是通过静态链表的方式
应答情况
大多数是25分的题,用时大多在25-30分钟,准确率不错
解题思路
静态链表一般会给 address key next 作为一个node,一般情况下数量级会小于10^5 因此可以通过一个大数组存放给的节点,然后通过遍历链表完成操作.
坑点
- 一般给的node会比链表中含有的node多,即给了一些不在链表中的node.
- 给的链表头结点可能会是-1\NULL即链表可能为空
- 要求的操作比如按条件分开,分段排序等,每一段也可能是空的(即不含有相应条件的node),需要做非空判断.
注意事项
- 因为需要频繁判空和操作最后一个节点,注意
vector.size()
的时间复杂度是常数的,返回值类型是unsigned,因此如果使用vector.size()-1
这种判断方法结果在空的时候会是个很大的数(溢出).需要注意.
字符串解码编码
应答情况
大多数是25分的题,少部分和排序等一起作用
解题思路
- 可以把较短的字符/数字组合成的串按位乘以字符/数字的域编码成数字,然后使用时再解码.
- 对于给定较长整串包含多组信息的情况,不妨把需要用到的信息在录入串的时候就一起拆出和串一起储存.或者需要使用string类型,因为string的substr和重载的比较运算符都很好用.注意和strcmp一样,对于值是a和b的string,a<b==1;
- 在需要统计的时候可能和map结合,在使用完map后可以把map的内容转到vector里进行排序.
坑点
- 题目会很繁杂
注意事项
- 一般写起来会分比较多的情况,要求也比较多,写起来很复杂,写之前一定要构思好过程,避免返工.
- 可能在输入时和输出时都需要做过滤,一般我把过滤步骤放在输入和从map转到vector的过程中
- 注意排序函数的正确性.
排序
就是排序呗,一般是使用结构体数组进行排序,部分题还需要使用map统计
应答情况
大多数是25分的题,用时大多在25-30分钟,准确率不错
解题思路
- 一般的排序题直接sort秒
- 对于排序-统计之类的题,可以在排序之后使用map等进行统计然后再转回数组储存的方法
- 对于要求多种排序的题,最好在一开始就有一个排序来避免超过时间,但是很多种排序的题时间本身很充裕,对单独的要求在要求处单独排也行.
坑点
- 有些输入可能是需要过滤的
- 排序后的数组可能会是空的,
注意事项
- 需要对输出时候的数组进行判空,
- 需要在输入的时候进行控制