滴滴三面几道算法题

1、大数组,很多重复,怎么排序 2、1到n+2范围的数选n个组成一个数组,找少的那两个 第一个我答的桶排,第二个不会O(n)的。 怎么答?
全部评论
文艺做法:     设缺失的数为x和y,将原数组和数组{1,2,3,....,n,n+1,n+2}合并,得到一个长度为2n+2的数组Array。 求得Array[ 0 ]^Array[ 1 ]^...&Array[ 2n+1 ]的值V,则V=x^y。由于x!=y ,V肯定不为0。     随便选择一个二的次幂值m,使得V&m>0,比如V=0001001(2) ,则m可取1,8。     将Array中的元素分成2个数组,分组的依据为Array[ 1 ]&m>0及Array[ 1 ]&m=0。此种分法,必然将x和y分到2个数组中,且两个数组除x和y之外,其它的数组都是成对出现的。     将2个数组分别取异或(计算方式同于计算Array的值V),得到2个值,即为x和y。 2B做法:        定义一个长度为n+2的bool数组,对于数组的每个值,将bool中对应位置设为true,然后找到2个false的下标。 结论:         此题存在纰漏,而防止2B做法出现的方法应该是提供2个数组,第2个数组比第一个少了2个元素,设计算法找出少的2个元素。
点赞 回复
分享
发布于 2017-09-22 13:38
第二个用bit把
点赞 回复
分享
发布于 2017-09-22 13:25
联易融
校招火热招聘中
官网直投
设缺失的两个数为x,y 则 1+2+3+...+(n+1)+(n+2)=S1 (固定常数) 1^2+2^2+3^2+...+(n+1)^2+(n+2)^2=S2 (固定常数) 则对给定的数组,其全部元素和为M1,全部元素平方和为M2 则有 x+y+M1=S1 x^2+y^2+M2=S2 解出x和y即可
点赞 回复
分享
发布于 2017-09-22 13:25
我和你的第二题一样,我给出的思路是这样的,给数组排号,数组为1到n号,数字1放在1号位置,数字2放在2号位置,以此类推,n+1和n+2设置为两个false的布尔类型,如果数组中出现n+1和n+2,就把对于的bool设置为ture,把出现n+1或者n+2的位置设置为0。整体思想就是给数组编号,然后里面的数字对号入座。这样是O(n)的复杂度,O(1)的空间复杂度。我当时答完三面就过了。
点赞 回复
分享
发布于 2017-09-22 13:31
第一个计数排序
点赞 回复
分享
发布于 2017-09-22 14:49
比如对全国考研数学成绩排序
点赞 回复
分享
发布于 2017-09-22 14:50
大佬,能否把这两个题目描述清楚点啊,没太看懂题目
点赞 回复
分享
发布于 2017-10-06 19:58

相关推荐

点赞 15 评论
分享
牛客网
牛客企业服务