1、时间2018年8月29日 上午十点半
2、部门:TEG,语言偏向c++,python也能接受
3、面试流程:
1)自我介绍
2)写代码:一共三题
a、
输入:两个区间,区间是左闭右开的
输出:这两个区间是否有交集
示例: 输入 [3,5) [6,11) 输出 false
输入 [3,5) [4,11) 输出true
写一个函数,可以用任何语言,自行组织输入结构
思路:首先取两个集合左边最小的集合a,然后比较集合b左边和集合a右边有没有交集
#sub1 list [a,b] sub2 list[a1,b1]
def getMinStart(sub1,sub2):
if sub1[0]<=sub2[0]:
return sub1,sub2
else:
return sub2,sub1
def sameTheSub(sub1,sub2):
if len(sub1)!=2 or len(sub2)!=2:
return false
sub1,sub2=getMinStart(sub1,sub2)
if sub1[1]<=sub2[0]:
return false
elif sub1[1]>sub2[0]:
return true
b、
输入:一个数组 a,a中每个元素都是一个区间,左闭右开
输入:一个区间b
输出:把区间b插入到数组 a中,输出插入以后的新数组
a中的区间是从小到大排好序的,且两两之间无交集
要求输出的数组也是有序且两两之间无交集的
如果b与a中任意元素有交集,则无法插入,则输出原始数组
例外是:如果b可以完全覆盖a中的某些元素,则把被覆盖的元素删掉,再把b插入进去
示例:输入 a = [3,5) [6,9) [15,18) b = [10,12)
输出 [3,5) [6,9) [10,12) [15,18)
思路:首先判断b是否与a的某个元素有交集,及与a有交集的数量,交集大于1则直接返回,等于1,则判断是否覆盖,等于0,则判断b应该插入的位置
def insertSet(a,b):
#异常情况
if len(a)==0:
return b
if len(b)!=2:
return a
indexList=[]
count=0
firstIndex=-1
for i in range(len(a)):
if firstIndex==-1 and a[i][0]>b[0]:
firstIndex=i
if sameTheSub(a[i],b):
count+=1
indexList.append(i)
if count>1:
pass
elif count==1:
if b[0]<=a[indexList[0]][0] and b[1]>= a[indexList[0]][1]:
a[indexList[0]]=b
else:
pass
elif count==0:
if firstIndex==-1:
#判断应该插入头部还是尾部
if (a[0][0]<b[0]):
a.append(b)
else:
a.insert(0,b)
else:
a.insert(firstIndex,b)
return a
后来经面试官提示,少考虑一个情况,如果交集有多个的话,判断是够覆盖多个元素的情况。
c、
归并排序
输入:a,b两个有序数组
输出:有序数组,重复元素剔除
思路:简单的归并的一个题目,需要注意的是a、b可能原先就存在重复的情况。
def mergeWithDumplicate(a,b):
c=[]
if len(a)==0 and len(b)==0:
return c
elif len(a)==0 or len(b)==0:
noEmpty=None
if len(a)!=0:
noEmpty=a
else:
noEmpty=b
c.append(noEmpty[0])
for i in range(1,len(noEmpty)):
if noEmpty[i]!=c[len(c)-1]:
c.append(noEmpty[i])
else:
i,j=0,0
if a[0]<=b[0]:
i=1
c.append(a[0])
else:
j=1
c.append(b[0])
while(i<len(a) and j<len(b)):
if a[i]<=b[j]:
i+=1
if a[i]!=c[len(c)-1]:
c.append(a[i])
else:
j+=1
if b[j]!=c[len(c)-1]:
c.append(b[j])
remain=[]
if i<len(a):
remain=a
if j<len(b):
remain=b
for i in range(0,len(remain)):
if remain[i]!=c[len(c)-1]:
c.append(remain[i])
return c
3、问项目
主要询问了融360实习的中介挖掘的思路,百度的短文本分类的等项目,然后给了场景题,10w的文本,4000个类别,有什么好的方法解决分类问题。
4、问问题
问了面试官一些问题