网易笔试aazz题动态规划解法;贝壳内推
开局广告:请看我的发帖,有贝壳找房、阿里、美团内推。贝壳内推14号18:00截止!
尽量加群,我在群里分享了很多笔试面试经验和重点,比如你们今天考的java内存分配、垃圾回收、三道有两道动态规划、二分思想、排列组合这些我都给群里同学列过重点。
内推帖子传送门:qq群号830300740
这类编程题一般空间管够,但是很容易超时,导致有的同学明明方法对了,但是却只过了30% 50%的情况出现。
这个时候就不得不安利一波动态规划了,用记忆数组的空间换取时间,在笔试编程题中是永远不会超时的。
算法思路如下:时间复杂度应该是m✖️n+m+n;空间复杂度应该是一个m✖️n数组,但是比其他方法少了很多递归调用
总结一下以上方法的关键点是
1.通过举例分析、结合二进制分析发现动态规划方法的状态变化方程,也就是f(m,n)跟f(m-1,n)以及f(m,n-1)的关系。
2.结合“二分”思想,一步步比较、拆解。
3.与这个题目类似的有你们做的另外一个题目,苹果堆二分法判断的题目、求数组中第K大的数的题目。
4.容易出错的地方有m、n、k的值的动态变化做的不对导致出错。
思路通俗一点就是:
第一位是1的比第一位是0的大,第一位是0还是1可以把字典所有字符分成最大的一类和最小的一类,并且我们能算出以1开头的最大的那一类有多少个,0开头同理。然后要你找第K小的数(字符),到哪一类里面去找只要把K和0开头的字符个数比较就行?以此类推,继续一位位拆分下去
有人说想要代码,我觉得代码是其次的东西,算法的逻辑思路,以及思路是怎么来得比较重要,面试的时候会当面考察。
代码各种语言不一样,自己写吧
#网易##贝壳找房##内推##笔试题目#