百度提前批语音方向笔试(python卷)吐槽and复盘
两道不定向选择,一道考python3和python2的区别(我从入行以来就一直是python3,从没用过python2,我咋知道。。),一道考__init__和__new__,__new__几乎没用过(淦)。
5道填空,花里胡哨。
- Q:python函数怎么修改全局变量 A:函数里先global变量,再修改,不知道对错
- Q:python5种报错信息分别代表什么错误 A:attribute error,我写的属性错误,identi~ error 写的语句错误,index error:写的序号错误(应该是索引错误,但是我忘记index的中文翻译是索引了)Name Error:命名错误(引用未定义的变量名、类名),还有个忘记了
- Q:python的内建数据结构 A:list,set,dict,tuple,应该漏了一个Sequences,这sequences我从来没用过,不知道什么东西,刚查的
- Q:python的参数传递方式 A:基本变量类型如int,float等是值传递,list,set等结构体是引用传递,这里正确的应该是可变变量结构是引用传递,像tuple不可变类型依然是值传递
- Q:python不可变的数据类型 A:tuple 我应该这题是错的,除了tuple,普通变量类型int,string等都是不可变的
1:给定一个数组nums=[1,3,2,3,1],求幸运数组对数量,幸运数组定义如下,i<j and nums[i]>2*nums[j]。输入类型为整数,nums长度<5000。
A:这里有个陷阱,就是题目给的样例都是正整数,实际上输入类型整数已经提示了输入会有负数,如果只考虑正数就是0通过,直接暴力是60%,这里我使用空间换时间,用字典去保存前面计算过的值的次数比如dict[nums[i]]=XX次,那么当第二层循环再遇到相同的值时,例如nums[i]==nums[j],那么number=当前计数值cur+dict[nums[i]],接着break出,这里我卡了很久,是因为没考虑负数的情况,如果是负数,那么number还需要+1,因为负数>2*负数。这个小细节卡了我半小时。这样就AC了。
2:简化版的Maxpool1d。[1,3,2,-1,5,3,4],给定大小为k的滑动窗口,从数组头滑动到数组尾,输出每个窗口里的最大值,要求时间复杂度O(n)。
A:第二题真的超级简单,题目都说了滑动窗口,那就双指针+滑动窗口,直接完事。我是边滑动,边用max函数直接取窗口里的最大值,原本是想先最简单的做,看通过多少,再用窗口每次去掉最左边,新增最右边的性质去优化。。。。结果直接AC了,我都懵逼了,幸好这题太简单,我1分钟就AC了,才有足够的时间回到第一题去找问题。
必须要说下,百度的编程题特别不友好,第一是不能用IDE,不允许跳出,第二是没有自测,你只能写完点保存调试,后台返回你通过多少,其余信息都没有。我第一次遇到这么不友好的笔试,连自己测试都不行,纯黑盒,我寻思正式工作,你写完一个代码也会自己想几个例子去做单元测试吧,这笔试就完全不允许自测。。第一题卡的我苦不堪言,一直都是通过0,但凡能自测,我自己设计几个测试用例都能早点知道问题在哪。