《算法系列》之 刷题准备

简介

  这里是刷题会用到的一些准备工作,和一些注意事项

习惯的养成

  我们在leetcode上写题时,代码输入框都会有模板,甚至还有需要用到的数据结构。优点是可以沉浸式的只关心代码逻辑的书写,缺点是,你面试的时候,只有一张白纸,让你用笔写代码时,可能会因为写不出这些代码,而挂掉。我的建议是,开始刷题时,可以用IDEA上LeetCode Editor之类的插件,或者直接浏览器刷题当做过渡,但刷完几十道题后,需要培养手写代码的能力。必要时候最好能默写一些模板,例如之后会讲的左中后序遍历,回溯等,这样才能下笔如有神。
《算法系列》之 刷题准备_第1张图片
  除了锻炼手写能力外,还要特别注意代码规范问题。平时写代码时不能乱写一气,通过了就算成功。 知道怎么把复杂的算法写出来很难,知道怎么把复杂的算法简单规范的写出来更难,也更值得我们学习。 这样在面试中也会给我们加更多的印象分。这里有个小技巧,我们在刷题时,经常会用到辅助函数,我们统一命名为helper,返回值我们统一命名为res。为什么这么做呢,因为题很多,命名随意。平时没关系,面试时写错单词,或者命名方式不对就尴尬了。还有一个原因是,我感觉平时命名浪费了我写代码的大量时间,就为想个好名称,用这时间去抓紧时间AC,它不香吗!

关于语言

   刷题不用太纠结编程语言,选择自己熟练的即可,重要的是思路,而不是具体的语言实现。 我使用的是Java做总结,如果有其它语言的基础,看代码的话也能大概看懂,选择自己熟练的语言即可。

时间复杂度

   平时我们刷题时,需要尽量做到时间复杂度和空间复杂度最优,如果时间复杂度和空间复杂度你只能选一个优,一般要选时间复杂度更优,用空间换时间,因为现在磁盘越来越便宜,但时间效率越来越重要。当然不同业务还是需要不同考虑。
《算法系列》之 刷题准备_第2张图片
  在leetcode的服务器上,时间测试相对空间测试来讲更准一点,但也只是仅供参考。同一段代码,多跑几次,可能耗时就不一样了,这时只要我们的时间复杂度是最优的,就不用纠结那一两毫秒的差别当然大多时候,时间的差距就是我们时间复杂度的差距。 这里我们的目标是:每道题都要超过同语言用户的80%提交,否则,低效率通过,还不如不做,浪费了一道好题

空间复杂度

  我们的目标是更小的空间复杂度,但leetcode上的内存占用测试有点拉跨,不太准,我估计是同时运行的程序太多,我们的程序占用内存本就差别不大(相对于至少几十M的服务来说,几十个字节的确不算多),最后导致内存占用测试不准,经常同一个程序,一会超过10%,过一会儿就超过了90%,这个“内存消耗”可比“执行用时”离谱太多了。所以不用太纠结空间复杂度的超过比例,只要我们的复杂度是最优的就好。

重复刷

  高频题需要多刷,才能熟能生巧。尤其是HOT 100,至少要刷两次以上,只要刷过了一边之后,第二次写不出来,也会有印象的。如前文所说,有些模板最好能默写,这样才能做到秒杀程度,200题刷2遍吃透要好过400题只刷一遍。
《算法系列》之 刷题准备_第3张图片

每日一题和周赛

  刷到一定程度后,可以坚持做做每日一题和或者参加周赛,尤其周赛中的题目都是会进入题库的,有些周赛题目将来会变为仅会员可见,换言之,参加周赛可以免费做新题。做周赛还有一个好处是,有的大厂喜欢在面试时抽当周的周赛来做考题。并且我们还可以看看大佬的思路与操作,利于开阔眼界,增加见闻。
《算法系列》之 刷题准备_第4张图片

算法题与面试

  我相信大多数人刷题只是为了面试,而算法往往只是面试的一环,偏偏这一环的题量很大。出的题我们如果忘记了,或者直接不会都很正常。没面过不用气馁,只能说明我们和公司缘分未到,面过也不用太骄傲,还是要多多刷题,才能每日进步

你可能感兴趣的:(算法,算法,leetcode,java)