3.30 阿里校招实习笔试

第一题 超时了……
第二题 有n个数,其找出其子集,满足:
是连续的自然数,如集合[1 2 3]
1 2 3 12 23 123 都是,13就不是,求每个子集最大值的期望
(我最后才反应过来他给的数据不一定是连续的,所以要判断子集是否合法 等我改完已经交卷了…… )
(awsl 吃了两个鸭蛋)

#n 个数的子集和最大值的期望
#连续的子序列

def valid(arr):
if len(arr)==1:
return True
else:
for i in range(len(arr)-1):
if arr[i+1]-arr[i]!=1:
return False
return True

def get_vec(n):
#已排好序的
res=[]
dicta={}
for i in range(1,len(n)+1):
for j in range(0,len(n)):
temp=n[j:j+i]
if temp not in res and valid(temp)==True:
res.append(temp)
for i in res:
maxnum=max(i)
if maxnum not in dicta:
dicta[maxnum]=1
else:
dicta[maxnum]+=1
lenres=len(res)
res=0
for i in dicta.keys():
res+=float(i/lenres)*i
return res

def test():
n=int(input())
lst=input().split(' ')
newlst=[]
for i in lst:
newlst.append(int(i))
ans='%.6f'%get_vec(newlst)
return ans

print(test())



#阿里巴巴330笔试##阿里巴巴##笔试题目#
全部评论
同两鸭蛋
2 回复
分享
发布于 2020-03-30 20:27
gg我也没判..按道理应该可以过一些用例吧🙄
点赞 回复
分享
发布于 2020-03-30 20:51
阅文集团
校招火热招聘中
官网直投
同时两个鸭蛋  第一题 用python 写太吃亏了  我看很多人用O(n^2)可以过百分之三十  同样思路 过不了。。后面我简化这道题整整花了一个小时 不过还是没过。。。我后面简化方法是,一开始可以先排个序(快排)  然后每次最大值从数组开头取  取值一半后  对新的值进行冒泡排序下,放到合适位置,不过这种方法后面还是超时。。。
点赞 回复
分享
发布于 2020-03-30 22:41
想问下楼主阿里笔试的题目设置,是1个小时做完两道题,每道题限时30分钟吗?代码提交上去是直接出分,还是会返回调试结果(如果错了的话,会具体报错吗)?谢谢!
点赞 回复
分享
发布于 2020-04-04 18:48

相关推荐

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