Algrithm-day1

1.刷题也不是盲目无脑平推就行,除了讲量,还要讲方法。

2.算法解决的四个级别:

  • 第一个级别,你磕磕绊绊或者靠着面试官的提示写出来了正确的解法
  • 第二个级别,你快速写出来了正确的解法,能够完美应对所有的测试数据,包括可能的边角数据,也叫corner case
  • 第三个级别,你快速写出了正确的解法,并且写出来的是最优的解法,一般题目对于时间复杂度看的比较重,这里默认是最优的时间复杂度,个别题目对空间有要求可以另说。
  • 第四个级别,你的代码风格非常优美,变量名含义清晰,过程清楚明白,有一些简单的注释。有时候你可能发现你面试的时候明明都写对了,最后还是没通过,这就有可能是你的代码风格没有让面试官满意。

3.在这个阶段,hard可以挑少量题目进行尝试。题目比例方面easy需要全部刷完,median40%~50%即可。

4.不用强求最优时间复杂度,尽量以理解基础为重。

5.重心是要确保快速,这里可以给一个简单的标准,对于每道easy,从读题到AC不超过5分钟,对于median,从读题到AC不超过20分钟(实际上你可以做到比这个更快)。

6.拔高题:
对于应试能力,这里推荐leetcode每周举办的竞赛,这个竞赛每周一次,持续2H,题目一般是四道题,有时候是easy,medain,median,hard,有时候是两道easy两道median,都是新题,非常适合应试测试,题目难度也适合绝大多数人。

一个要注意的点是,在做题的过程中,也需要思考题目可能的变形和扩展。

(这个主要推荐在第一和第三阶段做,第二阶段主要还是训练速度和准确率)

7.1. 关于程序的运行速度:算法运行的速度由两部分组成,一部分是算法复杂度,比如O(n),O(N^2),另外部分是常量复杂度,比如O(n)也分到底跑了几遍n。

7.2解题过程中,如果你发现你的程序运行速度慢,要注意区分是由于复杂度高,还是常数大。

7.3对于面试来说,只要你的算法复杂度是最优的,常数大一般不会太care,除非题目特殊要求。

7.4因此也不需要去针对别人2MS,你5MS,一定要优化那3MS。系统评测本身也存在时间误差,不必对常数太过苛求。

7.5关于空间复杂度,除非题目有特殊要求,一般不用太过苛求,因为现在内存也没那么贵了。不过你也需要知道一些基本的压缩空间的方法,例如如何用O(m)的空间写01背包。

7.6关于语言选择,不同的语言本身执行速度也是不一样的,都是正常的。因为很多题目并没有因为是python所以合理的延长时限,导致有些题目正确的时间复杂度仍然有可能会超时,用python需要注意。

7.7关于最优时间复杂度,有的题目可能不确定最优的时间复杂度是什么,比如看上去有一个O(n2)的解,但是仔细优化可以有一个O(n)的解,但是不好看出来,这个时候有两种方式,第一个是直接问面试官最优复杂度,当然面试官不一定愿意告诉你。那么这个时候有一个折中的方式,你可以问这个题的数据范围是多少。你可以这么思考,如果一个题的n给到了1000,那么这个题的最优复杂度一定不可能是2n。因为现在的计算机跑几百年都跑不完。有一个粗略的计算方式,计算时间复杂度是否到了108,比如n是1000000,那么n2的时间复杂度就超过了108,那么反过来可以推断这个题的最优解是n或者nlogn。如果n是1000,那么就有可能是n2,如果n只有20以内,那么就考虑2^n了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值