顺丰笔试

太难了
幸运数一眼没思路,骗了点分;
排列感觉是二分,试了一下确实,一直超时是63%,开始以为是计算math.log2耗时,后来发现只要循环n次必超时,O(n)都不行,最后想到用数组提前保存一下同一个对数结果对应的数字区间,计算好每个区间内数字个数终于100%了...
    n = 5
    count = 0
    list = [0]*31
    for i in range(1,len(list)):
        # list[i] 代表2**i 2**(i-1)有多少个元素
        list[i] = 2**i-2**(i-1)
    cur = int(math.log2(n))+1
    for i in range(1,cur):
        count += list[i]*i # 元素个数*每个元素log结果
    count += cur*(n-2**(cur-1)+1)
    print(count)

#顺丰科技##顺丰科技笔试#
全部评论
第一题其实就是数列性质,你把数列出来,有一个性质比如当数列长度为1,2,3,4,5,6,7,8时,猜第一个数字的次数为1,2,2,3,3,3,3,4,你会发现一个规律,总的最坏猜测次数2^0个1加上2^1个2加上2^2个3.........等,实际上就是一个等差乘等比求和,具体以9为例,最坏猜测次数为1*2^0+2*2^1+3*2^2+4+4最后加的这两个4是因为边界问题,此时算法时间复杂度为O(N),代码如下:
6 回复 分享
发布于 2022-09-01 14:00 四川
第一题是求数列和,只不过数列的性质比较好,可以加速计算。数列长这样:1 2 2 3 3 3 3 4 4 …
2 回复 分享
发布于 2022-08-31 23:31 上海
我第一题是二分+dp,用unsigned long long, 死活过81%。 第二题我怀疑就是二叉树,但题目就是说图,然后把所有节点的值的绝对值加起来,骗分,18%
1 回复 分享
发布于 2022-08-31 21:29 吉林
{"pureText":"","imgs":[{"alt":"discuss_166****683994.jpeg","height":733,"localSrc":"content://media/external/images/media/49752","src":"https://uploadfiles.nowcoder.com/message_images/20220831/898222181_1661959684548/discuss_1661959683994.jpeg","width":1426}]}
1 回复 分享
发布于 2022-08-31 23:28 北京
有构造试卷的代码吗
1 回复 分享
发布于 2022-09-07 19:15 北京
直接上公式
点赞 回复 分享
发布于 2022-09-01 10:41 广东
幸运数有js版本的代码吗
点赞 回复 分享
发布于 2022-09-02 22:48 江苏

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
评论
6
14
分享
牛客网
牛客企业服务