阿里笔试

阿里出题还是有水平!
第二题的测试用例是故意误导大伙的。
大家可以手动计算一下[10, 9, 8, 7, 6]这个测试用例,结果是10。
#阿里巴巴##笔试题目#
全部评论
纯暴力就是每次取前四大的数字,全部减一。然后重新排序。然后再次循环。过40%。
4 回复 分享
发布于 2022-03-25 11:10
纯暴力会过40%,掉入这个陷阱的同学应该是测试用例能过,但是运行以后过0%。
3 回复 分享
发布于 2022-03-25 11:09
40还有个可能是爆int了,我改成longlong就过了😂
2 回复 分享
发布于 2022-03-25 11:13
是10没错 但我感觉写的代码跑出来应该也是10呀...
1 回复 分享
发布于 2022-03-25 11:02
成功落入陷阱,最后十分钟改成每次减一过40%,知道怎么优化但心已经乱了,改都能改错来。结束之后两分钟就知道咋改了😭😭😭
1 回复 分享
发布于 2022-03-25 11:03
被唬住了,呜呜
1 回复 分享
发布于 2022-03-25 11:52
不应该是8吗?为什么是10
点赞 回复 分享
发布于 2022-03-25 10:59
难道我题目都没看懂吗
点赞 回复 分享
发布于 2022-03-25 11:10
成功掉入陷阱,请问这题有 ac 代码吗
点赞 回复 分享
发布于 2022-03-25 11:21
第三道有大佬过了吗,能不能讲讲怎么做的
点赞 回复 分享
发布于 2022-03-25 12:20
能问一下第二题的思路是什么吗
点赞 回复 分享
发布于 2022-03-25 14:52
感谢楼主,终于明白自己为啥错了,原来掉入思维陷阱了😢
点赞 回复 分享
发布于 2022-03-25 14:54
我机试的时候直接暴力,每次-1都重新排序,想着5个数排序时间不高,结果只有40% 后来想了一下,开始排序一次,-1之后必然是一个有序数组,只要找到第一个大于首位的数字就行了,然后进行翻转前几个数字。下边代码没来得及提交 t = int(input()) def fun(l):     cnt = 0     l.sort()     while l[1] * l[2] != 0:         cnt +=1         for i in range(1,5):             l[i] -= 1         p = 1         while p < 5 and l[p] < l[0]:             p += 1         if p == 5:             continue         left,right = 0,p-1         while left < right:             l[left],l[right]=l[right],l[left]             left += 1             right -= 1     return cnt while t:     t -= 1     l = list(map(int,input().split()))     res = fun(l)     print(res)
点赞 回复 分享
发布于 2022-03-25 20:00

相关推荐

点赞 评论 收藏
分享
评论
9
7
分享

创作者周榜

更多
牛客网
牛客企业服务