首页| JavaScript| HTML/CSS| Matlab| PHP| Python| Java| C/C++/VC++| C#| ASP| 其他|
购买积分 购买会员 激活码充值

您现在的位置是:虫虫源码 > PHP > PAT蓝桥LeetCode学习路径刷题经验

PAT蓝桥LeetCode学习路径刷题经验

  • 资源大小:1.30M
  • 上传时间:2021-07-09
  • 下载次数:0次
  • 浏览次数:0次
  • 资源积分:1积分
  • 标      签: 一般编程问题

资 源 简 介

从柳婼博客买的pdf版的资料,仅供学习参考使用,不得传播。整个PAT考试的流程是:等到开放报名入口的时候在官网报名->自己把网页上的准考证打印一下考试当天带着身份证、准考证和笔去考场→在电脑上做题目(和平时刷题一样提交后就能看到这道题的得分)->等到3小时考试时间到(考100分就可以提前交卷出考场啦)→>考完等大概半小时,考点当场打印证书,拿着证书回家乙级是5道中文题目,分别是15分、20分、20分、20分、25分,官网题库链接https:/pintia.cn/problem-sets/994805260223102976/ problems甲级是4道英文题目,分别是20分、25分、25分、30分,官网题库链接:htps:/ pinta,cn/ problem-sets/994805342720868352/ problems顶级是3道英文题目,由于顶级题目偏难,一般ACM大佬才参加顶级,加上我自己也没有参加过,所以就不多介绍啦~(相信参加顶级的一定对PAT比较了解不需要我来介绍啦==)最近PAT题库中还推出了基础编程题目集,比乙级还要更基础(简单)一些,如果觉得乙级的难度还不够简单可以去体验一下题库~链接https://pintia.cn/problem-sets/14/problems(一般情况下我觉得直接从乙级or甲级开始刷题就ok啦~)刷题的话还是在官网 pinta(PTA)的题库刷比较好,我听说有些人是从牛客网或者其他地方刷题的,然而很多时候虽然可能题目相似,但内部具体的测试样例还是有些不一样的,所以同样一段代码提交上去可能会产生不同的结果,比如我博客某篇题解代码,很多人来评论说在牛客网上无法通过,但在官网能通过,说我的代码没有考虑周全,最后发现是牛客网的内部测试样例没有按照题意来设计.当然有的时候也会发现官网通过了牛客网没通过时确实是自己的代码有疏漏,没有考虑到一些边界情况,正好官网的判题样例也没有考虑到..(这个时候我会把自己的代码完善一下)~官网的题库从上到下的顺序就是每一次PAT考试产生的题目,在考试过程中也使用的是和官网O题库中同样的判题系统,相比较而言更真实可靠~所以还是推荐用官网PTA(htts:/ pinta. cn)直接刷题吖考PAT对学习|考研|工作的作用是什么这也是很多人会在刚知道PAT的时候问我的问题~学习方面:刷算法题当然对提高算法有很大帮助呀~刷完乙级,基本上就理解和掌握了基础的数据结构(数组、链表、字符串)~也会了一些比较基础的算法(比如排序、查找、递归),最重要的是很多人刚入代码的坑,自己的思维无法准确的用代码来描述,想到的解决思路却无法用代码表达出来,乙级刷完就完全可以解决这个问题啦~刷完甲级,首先已经能看懂英文的算法题目描述了~然后还能理解和熟练使用一些经典的算法,比如最短路径、并査集、树、图、深度优先搜索、广度优先搜索、贪心算法、拓扑排序、哈希等等~对自己的算法能力的提高是显著的~考研方面∶首先说浙大计算机院,浙大计算机系的考研是分为初试和复试,复试又分为机试和面试,机试的题目就是类似于PAT甲级考试的题目(每年机试过后的题目也会增加到甲级题库后面),而且机试可以申请免试,只要具有前一年的3月、9月、12月的任意一次PAT甲级的证书即可~要知道把所有的机会都压在机试那一次是比较冒险的,一般情况下大家都会在3月复试之前拿着前一年3次PAT考试中最高的那次成绩申请浙大计算机系考研的复试机试免考,这样就可以在复试中更加稳妥啦~不仅是甲级的成绩可以免机试,顶级的成绩也可以,顶级成绩乘以15可以充当机试成绩(最高100分),例如顶级考了67分及以上,就可以和甲级100分一样~我认识的很多其他学校的考研or保研的学生也会参加PAT考试,为了得到一张满意成绩的证书,这样就能在考研or保研的面试过程中更加具有竞争力Mail: 1604076765@qq com UUID: dBedaed7-43fe-3cct-b963-fa20954eeda7工作方面:首先说PAT企业联盟,PAT和很多企业合作,这也是为什么PAT定在3月(春招)9月(秋招)12月(秋招补招or寒假实习)的原因~在PAT报名的时候填写自己的个人信息,如果是有求职意向的,可以对自己的个人简历写详细些,让企业知道你是打算找工作的并且更加了解你拥有的技能和想应聘的职业,这样在考完后会收到很多企业的邀请面试的邮件~也可以主动拿着PAT的证书在有效期内(有的是一年,有的是两年,不同公司规定不同)去这些和PAT联盟的企业,一般都可以免笔试并优先录取,比如 Google中国的要求是:甲级前15名、顶级前20名且80分以上,2年有效,可以免除笔试,直接进入 Google的面试阶段;微软的要求是:甲级90分以上,并且排名在当场考试前30名,同时符合微软项目招聘的要求(毕业时间和专业等),可免技术笔试进面试…还有其他一些公司,例如小米、华为、网易、美团、雅虎、阿里、淘宝、腾讯等..都对PAT的成绩以及能够给予的优惠有详细说明,具体企业联盟详情在官网的这里可以看到https://www.patest.org/company比如我收到过百度、网易雷火的面试邀请邮件,还接到过一些企业的电话,但是由于当时我才大二大三没有打算找工作所以也就没有去参加面试而且我的个人简历里面也明确写了目前不打算找工作,所以打电话找我的企业不算多,不过身边有朋友通过PAT进了网易,接到微软的面试邀请等~所以对于求职还是很有帮助的~而且身边很多考PAT的都是非科班打算转计算机的,如果想要找计算机类的工作,考PAT通过企业联盟应聘确实是个可行的捷径~即使不是PAT企业联盟中的企业,如果公司知道PAT(我刚知道PAT时候PAT名气和影响力还很小,这些年逐渐扩大)对丰富简历or面试应聘也是很有帮助的~刷PAT乙级和甲级需要掌握哪些知识官网对于PAT乙级考试应具备的能力是这样描述的1.基本的CC+的代码设计能力,以及相关开发环境的基本调试技巧;2.理解并掌握最基本的数据存储结构,即:数组、链表3.理解并熟练编程实现与基本数据结构相关的基础算法,包括递归、排序、查找等;4.能够分析算法的时间复杂度、空间复杂度和算法稳定性;5.具备问题抽象和建模的初步能力,并能够用所学方法解决实际问题概括来说乙级的要求就是,一门编程语言+最基本的数据结构~2.官网对于PAT甲级考试应具备的能力是这样描述的:1.具有充分的英文阅读理解能力2.理解并掌握基础数据结构,包括:线性表、树、图;3.理解并熟练编程实现经典高级算法,包括哈希映射、并査集、最短路径、拓扑排序、关键路径、贪心、深度优先搜索、广度优先搜索、回溯剪枝等;4.具备较强的问题抽象和建模能力,能实现对复杂实际问题的模拟求解。概括来说甲级的要求就是,在乙级的基础上,能阅读英文题意+基础数据结构+—些经典算法其实我们在准备PAT的过程中无需关心乙级和甲级考察哪些知识点,因为目前PAT的题库中题目已经足够的多,以上知识点在题库中都已经完全涉及,我们只需要刷完题库、熟练掌握题库中的那些题型就能掌握到PA需要考察的所有知识点~甚至能根据题库中不冋类型题目岀现的频率推断常考的题型是哪些、复习的重点应该放在哪方面等(关于常考题型和复习重点我在下文会提及)关于PAT刷题中编程语言选择和开发环境IDE选择的一些愚见Mail: 1604076765@qq com UUID: dBedaed7-43fe-3cct-b963-fa20954eeda7虽然PAT不规定编程语言,在刷题的时候也可以看到支持31种编译器,语言包括C、CJava、 Python、Ruby、Go、 JavaScript、PHP等,但是根据考点提供的开发环境可以看到,基本上只有支持cC+的DevC++、 Codeblocks、 Visual studio、V+6.0等,和支持Java的 Eclipse、 NetBean、 MyEclipse等,少部分考场会有支持 Python的 PyCharm.虽然之前我在考场遇到过直接用记事本写 Python代码的大佬(因为我当时的那个考场没有 Python编译器),也可以直接通过网页O提交看报错信息,然而如果要调试查看变量的值的话还是非常的不方便..所以那些不是主流的语言应该很少会有人使用它们刷PAT吧(毕竟不像 Leetcode大家都是在网页上直接在线写代码提交),刷PAT用的最多的编程语言还是Java和cC++,那关于C、C艹+、Java如何选择呢?C语言作为一门面向过程语言,是很多计算机初学者必学的一门编程语言,绝大多数计算机系大一就会教C语言,所以大多数人对C语言还是很熟悉的(不熟悉没学过也没有关系,书籍推荐部分我会讲到如何高效学习C语言)~C语言也确实是一门执行效率高的语言,然而最大的缺陷是,它缺少一些必要的、封装好的、可以直接使用的数据结构,比如我们知道数据结构里面除了数组链表还有栈、队列集合、映射等,做题的时候会需要用到这些数据结构,如果仅仅使用C语言,可能需要手动用数组或者链表实现它再使用,而一些比C语言高级的语言(这里的高级是指高度封装、对程序员更加友好)已经封装实现好了一些常用的数据结构,需要用的时候直接拿来用就可以~比如排序,使用C语言可能要手写一个是冒泡排序或者快排,而更高级的语言已经封装好了较为高效的排序算法,需要用的时候加个# include salgorithm>头文件然后直接一行 sort(begin(a,end(a);代码即可实现排序,这样能让我们在刷算法过程中把更多的精力集中在如何解决算法逻辑而非如何用语言实现一个常用的数据结构方面,大大提高做题的速度、降低代码的错误率~我知道大学计算机系或者想要做开发的必学Java,包括绝大多数人面向对象的入门语言也是Java,所以很多人就会想用Java刷算法,毕竟是将来工作和开发需要用到的语言~Jaa中确实有很多好用的集合框架封装好了各类常用数据结构,然而Java作为一门优秀的工程开发语言,在刷算法的时候却有些显得力不从心。我在刚刷算法的时候也是使用的Java,一开始PAT乙级的题目还好,勉强只有几题无法AC,都是因为运行超时…而刷甲级的时候就明显感觉出Java在运行时间方面的劣势了,有些题目连C+都需要优化算法才能保证不超时,更何况用Jaa.而PAT对于同一道题目不同语言的时间限制要求是统一的,如果用CC没有超时的题目一样的算法思路换了Java描述就超时了…岂不是很心塞..(虽然官方说可以修改Java输入方式提高运行效率,然而我试过了,还是会有一些30分的题目始终无法完全AC.)如果你不介意不能在PAT甲级中获得一个满意的成绩,只是希望通过PAT题库来锻炼自己的代码能力和编程语言运用能力,倒是可以考虑全程使用Java刷题..(当然我感觉如果单纯想提高代码能力和算法水平,刷 Leetcode会更节约时间)~如果执意想用Java学算法,而且是0基础,可以参考下文从0基础到蓝桥杯省赛一等奖的高效学习路径&书籍推荐部分中关于Java组如何备考蓝桥杯的学习路径和参考书籍接下来说C+。可能对于没有接触过C++的人来说这是一门陌生的语言,毕竟很多人对它的第一印象是:这是一门全新的和面向过程的C语言完全不一样的面向对象编程语言,进而产生畏惧感,其实不然。下面是一段关于c+的简介C+是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。C艹不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力Mail: 1604076765@qq com UUID: dBedaed7-43fe-3cct-b963-fa20954eeda7所以说,C+是一门可以兼容C语言语法的面向对象语言。其实对于刷算法来说,它是否是面向对象语言并不重要,它关于面向对象的部分(继承封装多态之类)我们也可以完全不学习,而且对于已经懂C语言的人来说,想要用C艹刷算法,几乎没有多少学习成本。也就是说,你完全可以在C++的文件里面使用C语言的语法,这不会产生报错。而那些好用的C艹+特性又可以随意的使用,像是增强版功能的C语言。对于刷算法来说,C艹最大的好处是拥有SπL(标准模版库),就像Java的集合框架一样,C艹里面封装了很多常用的数据结构,而只需掌握STL和C++的一些和C语言稍有区别的基本语法,就完全可以使用C艹来刷PAT、 Leetcode和蓝桥杯,这对算法之路是大有裨益的~下面是一段关于STL的简介STL是 Standard Template Library(标准模板库)的简称,从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,ST也是算法和其他一些组件的集合。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用安装额外的库文件。什么意思呢,比如说刷算法过程中需要用到集合set,我们知道set的特点是集合内的元素不重复(特别地,在C+里面,set是会自动排序的集合, unordered set是不会自动排序的集合),比如在set里分别放进4、1、1、2、3这几个元素,set里会自动变成1、2、3、4,如果我们只会C语言,可能需要一个个把数据放到数组里面,然后手动编写一些代码,检查进来的每一个元素在数组中是否已经存在,如果存在就不要再放进数组,最后对整个数组进行排序,才能达到set的效果。但是如果直接使用c+,我们就可以在头文件里面加个 include ,然后直接把set当作一个类似于数组的容器,把所有元素直接丢到自己定义的这个se类型的容器里,就会自动实现去重(去除重复元素)和排序的步骤~比如说题目要求将最后所有的答案去重后按从小到大的顺序输出,就可以直接将所有的答案元素放到set里面输岀即可~这样我们在刷题过程中就能更好地集中精力解决代码思路、算法方面的问题,而不是一个简单的答案输出或语法方面的问题,在考试过程中也能大大地节省时间,降低代码的错误率~更重要的是,使用C艹能写岀更加精简的代码,简短的代码对于刷算法过程中思路的梳理和把握是非常有好处的~看过我blog代码的人应该都会发现,我每道题的代码绝大多数都比较简短,这并非是我做完题目后将代码修修改改有意为之,你们所看到的代码就是我当时做这道题的过程中产生的代码,可能是因为曾经刷 Leetcode养成的好习惯,因为 LeetCode评论区有很多优秀简洁的代码,我会不断地向他们学习,写代码过程中也会想好思路再写,写的过程中也会不断反问自己是不是一定要这么复杂,进而不断优化自己的思路。因为代码写长了就容易产生错误,更容易使自己思维混乱,一旦题目没能AC,找bug和调试的过程也是非常地麻烦~而且我已经在blog上尽可能还原了当时写完题目后产生的代码原样,我不希望通过后期经过人工修改刻意简化的代码让很多初学者接触学习,这对初学者理解代码思路也是十分不利的。曾经 Github上有很多大佬帮我优化过一些代码,我只接受了其中部分代码,如果我觉得这不是刚看到题目写代码时候就能想到的思路,就不会接受这段代码我之前写的一篇教程《从放弃C语言到使用C+刷算法的简明教程b柳婼》(https:/www.liuchuo.net/333-3)很多人已经阅读过,里面也详细讲述了C+在C语言基础上扩充的一些新特性(如名称空cIn和cout、bool变量、 const常量、引用、sort排序、auto声明、 to_string0、stoi和stod等)以及刷算法过程中常用的STL(如动态数组 vector、集合set、映射map、栈 stack、队列 queue、在超时的时候很好用的 unordered_map和 unordered set等),学习C++的成本已经比绝大多数踩过算法坑的人降低很多接下来说我关于开发环境DE如何选择的看法Mail: 1604076765@qq com UUID: dBedaed7-43fe-3cct-b963-fa20954eeda7经常有一些人会给我bog评论说,我的代码无法通过编译(大部分人都很和善,只是好奇地问我的代码为什么能通过oJ但是无法在他的编译器上运行,而有的人直接是以理直气壮的质问和嘲讽的语气说代码根本是错的少了头文件or错的代码还放bog上误导人之类的(⊙o。)我也是非常的无奈~)其实是这样的,编译器的种类、版本不同,所得到的结果自然不同。如果你使用的是Ⅵ sual studio,可能会有部分℃99标准的库函数或语法是不被支持的,但是这在C++11中是支持的,所以会导致一段通过OJ的代码在VS上无法编译通过的情况。如果你使用的是DevC+,可能忘记了在设置中包含std=c++11让Deν支持〔艹-11特性(我在简明教程的末尾也有特別提到如何让υeν支持C艹1特性),否则一些C+1中的好用的函数可能会产生编译无法通过的情况~如果你用的是 Xcode或 CLion等,因为它们内置了较多的常用库函数,很多变量名可能在O中不是关键字但是在自己DE上却是,更严格的标准和更智能的DE确实会引起一些 Warning甚至Eror~如果你使用的是C+6.0或者 Turbo c+-,mmmm人生苦短,为什么不考虑换个好用的DE呢?有的时候也会产生自己DE上好好的,J上却编译错误的情况,每个OJ的判题系统有自己的编译环境,这个编译环境的版本配置应该会在它的oJ系统中阐述介绍,比如PAT编译CC艹时用的是gcg+4.7.2,Java用的是 Javac1.6.0等,而每个IDE自带的编译器版本不同,我推荐的是DevC++,因为绝大多数在Dev-C+(使用时请在设置中包含std=c+11)通过的代码基本都能顺利通过PAT的oJ但也不是绝对,比如很多人就是习惯 isual studio(记得要注意考场上 Visual studio的版本,可能和你平时自己用的新版本的V差别很大)或者code: Blocks,我认为选什么编译器是次要的(只要不是用v*+6.0就好..),最重要的是选自己考场上提供的、熟悉的DE进行平时的代码刷题练习因为我之前在网页上直接刷 Leetcode养成了不使用IDE的习惯,所以我自己平时刷PAT题的时候都是直接打开 Sublime teκt就开始写,写完直接提交给 PAT OJ,一般情况下就能AC了..如果没能通过OJ,我会再细看一遍修改一下代码,基本上如果是小问题就能直接解决了.如果实在遇到了难以解决的bug,我会用 XCode运行调试~但是由于考场上没有 XCode这么智能方便的DE(如果考场上有,我的做题效率肯定翻倍提高.所以说考试时候用自己平时习惯的DE是多么重要极大提升AC题的效率.),我会在考前几天熟悉一下Deν的使用和调试等技巧,避免考场上岀现慌乱不会用DE的情况(我第一次参加PAT就因为在考场上不会使用Deν只能用记事本敲代码.最后竟然结果还不错. emmmm)从0基础到PAT甲级100分的高效学习路径&书籍推荐根据上文关于编程语言如何选择的分析,我就默认正在阅读的你接受了我的安利,決定用C艹愉快地刷PAT并且打算在PAT甲级中获得高分甚至满分啦首先,得学C语言~大多数人在大学里都是学过C语言的,如果你是刚入计算机坑的萌新,不会也没有关系,可以现在开始学嘛~《语言入门经典》(霍顿/清华大学岀版社)是入门C语言的好书~因为作者很厉害~书在豆瓣的评分也很高~作为初学者,如果你对这种巨佬作者写的500多页的书比较抵触和畏惧,可以看《啊哈语言!逻辑的挑战(修订版)》(啊哈磊/电子工业出版社),是关于C语言入门的风趣的编程启蒙书~豆瓣的评分8.3,也很不错~通过这本幽默风趣的书也能掌握C语言~其次,得了解数据结构和一些基础旳算法~我所说的了解,是指知道有啷些常用的数据结构,了解如何分析和比较不同算法的算法复杂度,不求能够像我当初学习一样直接用C语言手写实现每一个数据结构(当然这也花费了我大量的时间,对于別算法来说暂时没有必要,代码能力可以通过大量刷O算法题目培养,而我只是提早培养了自己的代码能力而已),但求能看懂明白这些数据结构的概念含义~可能《数据结构》(严蔚敏/清华大学岀版社)这本书让很多人产生了怀疑人生甚至想要放弃编程的想法,所以在了解数据结构这方面,我推荐阅读的是《大话数据结构》(程杰/清华大学出版社),至少不会像严奶奶的书那样大量使用很多伪代码让人难以理解,这本书的好处是能让人看得下去,使用C语言进行讲解示例,而且讲述了每种数据结构如何运用在我们熟悉的生活中,对数据结构的理解很有帮助~Mail: 1604076765@qq com UUID: dBedaed7-43fe-3cct-b963-fa20954eeda7接着,应该了解一下C++语言~我上面已经安利过C++有哪些好处,但是我本人在学习算法过程中接纳并学习C艹经历了很大的波折(辛酸~),一开始我会了C语言,开始学Java做开发,当时觉得相比较而言Java真的比C更人性化更高级,里面封装了很多好用的函数,所以打算用Java刷算法后来发现大量超时,又换回C语言刷算法,在刷题过程中看其他博主的博客发现很多使用了C++的语法看不懂,想找到一篇纯C语言实现的很难,而且大多数代码并不优雅,反而冗长地让人不想去了解~所以只能被迫学习C+语言,一开始买了《C+ Primer plus》中文版,900+页的厚书,虽然很多和C语言内容重合看起来并不累,但看着很难挑出重点,书中有很多內容和特性都是更适合于做C++开发的人去学习,而对刷算法这件事儿并没有多大帮助,但也没有办法,毕竟对于一个算法路上的初学者来说,我并不了解哪些有用哪些没有用,每天带着那么厚的书去自习室很累,最后书被我用刀分成了3份每次带一小半减轻重量…也许正是经历过这些,我才会去写短短15页内容的《从放弃C语言到使用C+刷算法的简明教程by柳婼>(https://www.liuchuo.net/333-3)这个教程两三个小时就可以看完,编程语更重要的是练习,将教程里面讲过的那些特性有些印象,在刷乙级or甲级的过程中能够想起并主动多写多用多练,希望可爱的你们不要像我一样一开始因为怕麻烦和畏惧,错过了这么好用的刷算法的语言最后,就是开始刷题啦~可能有些人会觉得,不是应该在刷题之前先补充点算法理论知识么,比如看些算法书之类的~确实,在我学习算法的过程中,刷题之前我阅读了一些算法类的书籍,比如《啊哈!算法》、《数据结构与算法分析∶C语言描述》和《算法导论》,甚至还为了准备蓝桥杯竟賽读了《算法竞赛入门经典》和《大学程序设计课程与竞赛训练教材:算法设计编程实验》,阅读这些书确实让我补充了很多关于算法的理论知识,但也花费了我大量的时间~而且对于在PAT甲级中获得一个高分并没有太大的帮助~因为理论终究只是理论,想要在PAT这样的算法考试中获得好成绩还是需要大量的代码训练、针对题库的题型了解和锻炼等,而且PAT甲级中涉及的算法其实并不多,可能你打开一本算法书并不能很快找到这些在PAT考试中考祭的知识点对应的章节,因为他们零散的分布在各类理论书籍里,而针对刷题过程中遇到的题目直接去针对性搜索学习相关理论知识也能很快地掌握~重要的是,你要克服在面对这些陌生的高大上的算法名词时的畏惧心理,遇到不懂的理论主动去网上搜索,有很多优秀的博客会详细讲解这些算法的理论知识,在懂了基本的数据结构的基础上一定能很快地看懂哒不用担心刷题过程中如何平衡自己写代码和看他人代码的小纠结可能很多人在刷算法过程中,会觉得自己写不出来的时候看了别人写的代码就不是自己的了,感觉像是抄了一遍别人的代码,觉得不是自己想出来的印象不够深刻,可能因为小时候做数学题的时候,发现老师讲了一遍的数学题自己没记住,但是自己独立思考然后做出来的却印象很深刻所以觉得写代码的过程中也应该尽量保持独立自主完成~其实我觉得这样的想法是不太对的哦~算法这个神奇的东东,有它自身的一些特点,比如一道PAT题目,可能你看了题目后觉得自己有一点思路了,毕竟只是给个输入要求你给岀正确的输岀嘛,或多或少还是有些自己的想法的,就开始自己写,结果没能AC,修修补补改改也勉强最后AC了,但是代码却冗长繁琐,过阵子让你再做一遍这道题又没有思路了…算法题就是这样,总给你一种好像也不是太难的感觉,而且这种提交后会看到自己得分的真题题库总会让人产生一种当作一次正式考试测试一下自己的水平的想法,导致很多人刷算法完完全全就是在把自己仅有的思维和编程语法知识完全倒出来展现在代码里,如果这个人是个竞赛高手倒也没什么关系,但是如果基础不太好,直接自己写而排斥看他人代码的想法是对自己的算法提升是非常不利的,可能你冗长而思路不够清晰的代码确实AC了这道题,但是你可能也错过了向更优秀思路的代码学习的机会。反而那些没什么思路的人,可能去看了别人优秀的代码,让自己学会遇到这类算法题的清晰思路,还学了一些下次能用得到的编程语言技巧(比如18年12月PA考试结束后,一位可爱的小学弟来感谢我学了我代码中的 ssubstr(的用法,让他考试的时候直接AC了一道题,增强了考试时的信心,考试的后半段时间做题状态很好多拿了很多分)所以我建议不管这道题你写出来的代码是ACMail: 1604076765@qq com UUID: dBedaed7-43fe-3cct-b963-fa20954eeda7了还是做错了找不到bug,都应该看一看别人解这道题的代码是不是和你思路相同~在我刷题的时候,如果自己的代码和别人思路方法完全不同,那我会思考,我所写的方法是不是比别人写的代码优秀?很多时候会发现,并不能找到错误原因的那段代码本身逻辑就较为混乱,所以我的建议是直接删掉原来写的,对自己写的代码用更好的方法进行重构,因为即使这段代码勉强调试写出来了,下一次见到它还是难以理解,对自己的考前复习也是一种打击,会让自己看到这段代码就想要跳过不看,而且还让自己错过了一次学习他人优秀方法的机会,要知道刷题的真正意义是学到知识呀~PAT乙级和甲级题库的正确刷题顺序我在PAT题库的离线版中对每道题都标注了这道题所属的分类,比如PAT乙级1001害死人不偿命的(3n+1)猜想(15)[模拟]1002写出这个数(20)[字符串处理]1003我要通过!(20)「数学题]1004成绩排名(20)[查找元素1005继续(3n+1)猜想(25)[Hash散列1006.换个格式输出整数(15)[字符串处理虽然看上去PAT乙级涉及了很多不同种类的题目,但是由于PAT乙级题库整体属于比较简单的难度,所以在PAT乙级中不同分类题目之间区别并不是很大,都是一些简单的逻辑方面的处理和编程语言语法的运用等,所以我建议PAT乙级就直接按照题库所给出的题号顺序或者自己喜欢的顺序刷即可~刷题过程中如果觉得自己对于某一分类的题目做的效果特别不理想,可以多刷一些和这个分类相同的题目,加深对这个类型题目的理解不管是为了准备PAT乙级的考试,还是仅仅是为了通过PAT乙级锻炼一下代码能力和编程语言能力,刷的过程中如果发现这些题目实在是太简单了,可以不用完全刷完整个题库,挑一些自己做的不理想的题型多加练习即可,如果觉得题目对于自己来说还是有一定难度,为了在PAT乙级考试中获得一个满意的分数,还是建议把整个题库都刷一遍的~乙级的题目没有甲级那么多,题目又偏简单,刷一遍不需要多少时间的~相比较而言,PAT甲级的分类就显得非常具有参考意义。PAT甲级中的每一道题我也标注了分类,如1001A+ B Format(20)[字符串处理]1002A+ B for Polynomials(25)[模拟1003 Emergency(25) [Dijkstra算法]1004 Counting Leaves(30)BFS,DFS,树的层序遍历1005 pell It Right(20)字符串处理1006 gn In and Sign Out(25)[查找元素]1007 Maximum Subsequence Sum(25)[动态规划,最大连续子序列和]Mail: 1604076765@qq com UUID: dBedaed7-43fe-3cct-b963-fa20954eeda7原则上为了准备PAT甲级的考试,最好是需要将整个题目完完全全刷一遍的~甚至有一些准备考试的学霸会刷两三遍.当然我本人只刷过一遍.很佩服大佬们的毅力~不过也不是完全没有侧重点地刷~首先需要明确的是,如果是为了针对PAT甲级的考试,有一些题型是不会再考察的,所以刷题的过程中如果觉得这些不会再考的题型有些难以理解,可以选择跳过不做~当然如果是想要通过题目锻炼自己的算法能力,还是可以尝试做一下的~那为什么以前考过现在不考了呢,主要原因是,PAT考试一开始是没有顶级的,有一些稍微复杂的应该放在PAT顶级里的题目也被混在了甲级里面,而自从有了PAT顶级考试之后,这些稍微复杂的题目就不会再出现在之后的PAT考试中了~而且PAT甲级一开始是作为浙江大学计算机系考研复试的上机题目出现的,在题目量不够多的时候,题型涉及面较广,有了PAT考试之后,题目类型越来越趋于稳定,有一些题号较早的题目可能确实出过某类题型,但是在之后不会再出现,甚至在考纲中也移除了相关知识点的要求~这些题目主要是动态规划和大模拟题,我将这些可以暂时刷题过程中跳过的题目列在了下方1007 Maximum Subsequence Sum(25)动态规划,最大连续子序列和1014 Waiting in Line(30) queue的应用1017 Queueing at Bank(25)[模拟]1026. able tennis(30)[模拟,排序1040. Longest Symmetric String(25)[动态规划1045 Favorite Color Stripe(30)[动态规划,L|S/LCS]1068 Find more coins(30)01背包,动态规划其次,有一些题目虽然在题库中出现过,但是出现的次数很少,近两年也没考过,或者我觉得将来不会考、研究了也没有意义的,最重要的是可能研究起来也不是一时半会就能学会记住的,所以在备考过程中这些题目不是复习的重心,遇到这样的题目可以考虑暂缓复习,先去复习那些经常考祭的题型,等到复习完常考的类型后还有充裕的时间时再去钻研这类题目。我把这一级别的题目列在了下方1010Radi×(25)[二分法]1016 Phone bil(25)排序1033T0 Fill or not to fil25)[贪心算法]1056 Mice and rice(25)[ queue的用法1057 Stack(30)树状数组1066 Root of avl tree(25)[平衡二叉树(A树1123. Is It a Complete AVL Tree(30)[AVL1XJI剩下的题目就是我们真正要集中精力刷的题目啦,我把它们分为两类,一类是比较简单的题目,难度和PAT乙级差不多(每一场PAT考试,PAT乙级的最后两道题,一般都是同场PAT甲级考试的前两道题,只不过乙级是中文的题目描述,甲级是对应的英文题目描述,而题目、测试样例和需要提交的代码都是一样的),还有一类是涉及基础算法的(很有可能是你没有了解过或者只听说过但不会用的算法,一般出现在PAT甲级考试的最后两道题),每场考试PAT甲级就4道题,而前两道又是乙级难度的简单题,这两道题占了45分~而后两道25分和30分的题目又不都是难题(不要觉得30分的题目一定比25分Mail: 1604076765@qq com UUID: dBedaed7-43fe-3cct-b963-fa20954eeda7
VIP VIP
0.214153s