字节跳动面试 推荐算法
代码题:
给定一个数组points,里面是一些点的浮点数的坐标。再给定一个中心点坐标center。再给定一个数字k。现要求以center为中心点画正方形,求能包含points里k个点的最小正方形边长N。
输入:
points=[[1.0,2.2],[-0.5,1,2],[-2.1,-1.0],[1.5,-0.5]]
center=[0.0,0.0]
k=2
输出:
N=3.0
解题思路:
topK问题的变形
(1)用一个新数组distance[]来存储center与points数组中每个点的横纵坐标差值中的最大值。
(2)找到distance数组中的第k-1个
points=[[1.0,2.2],[-0.5,1,2],[-2.1,-1.0],[1.5,-0.5]]
center=[0.0,0.0]
k=2
distance=[]
for i in range(len(points)):
distance_x=abs(center[0]-points[i][0])
distance_y=abs(center[1]-points[i][1])
distance.append(max(distance_x,distance_y))
def partition(arr,low,high):
i=low-1
#基准值为arr[high]
for j in range(low,high):
if arr[j]<arr[high]:
i+=1
arr[i],arr[j]=arr[j],arr[i]
arr[i+1],arr[high]=arr[high],arr[i+1]
return i+1
def find_k(arr,low,high):
index=partition(arr,low,high)
if index==k-1:
return
if index>k-1:
find_k(arr,low,index-1)
else:
find_k(arr,index+1,high)
find_k(distance,0,len(distance)-1)
print(2*distance[k-1])
问答题:
- 过拟合的原因、怎样发现、怎样解决。
- 正则化。
- 最大似然函数怎么推出loss函数
惨痛的经验教训:
一面就被挂难免很伤心,不过还是要从自身上找找原因的。
代码方面:
- 代码刚开始讲的思路是不对的,在面试官的纠正和提示下才想到正确的思路。
- 写完code后有bug,细节部分思考的太少。比如其实不用找topK个,只需要找第K-1个就行。
- 没有答topK的算法的复杂度。
- 正则化细节的东西没有掌握。
- 自己的项目太简单了,有点不对口。
本来以为心情已经低到谷底了,但是后来发现,原来还没到谷底,还有心情更低点。
今天边听学长分享会边写这个博客,觉得还是要明确自己的工作方向。面完这么多试,都是宝贵的经验,即使失败也没什么。在思考是不是真的不适合算法这个岗位,转行工程方向会不会比较好。
面试技巧:语气坚定、眼神坚定。
主动、自信!我的宝贝!