9.20B站笔试

3个编程。
1. 每次可以选取一些数字-2**k,k每次+1,如果选取的数字个数不为0则为一次有效操作。问将数组中的数都减小到非负一共多少次有效操作。
思路:这不就是直接实现么感觉不难,但是之过了5%。。。就排序然后用指针遍历每次判断小于2**(k+1)就移动指针。。。无解,求大佬帮看。
def output(n, arr):
    res = 0
    arr.sort()
    k = 0
    i = 0
    while i < n:
        if arr[i] == 1:
            i+=1
        else:
            break
    if i != 0:
        res+=1
    k+=1
    while i < n:
        j = i
        while j < n and arr[j] <= 2 ** (k+1):
            j += 1
        num = j - i
        if num != 0:
            res += 1
        k += 1
        i = j
    return res
2. 数组每个元素为对应商品价值,输出的数组对应元素为为这个商品之前买的商品且价格大于当前商品的最大的index。
思路:暴力遍历然后内层倒着遍历就AC。
def output(n,arr):
    res = []
    dic = {}
    for i in range(n):
        dic[i] = arr[i]
        if i == 0:
            res.append("INF")
        else:
            idx = -1
            for j in range(i-1,-1,-1):
                if dic[j] > arr[i]:
                    idx = j
                    break
            if idx == -1:
                res.append("INF")
            else:
                res.append(str(dic[idx]))
    return res

3. 一个字符串形如(x-1)(x+5)问求最终x的系数是多少。
思路:遍历过程中维护两个变量,一个是乘积一个是结果,结果每次用上一个乘积加当前的num即可。感觉思路没有问题但是只过了20%。。。
string = input().strip()
n = len(string)
if n == 5:
    print(1)
else:
    mul,res = 0,0
    for i in range(0,n,5):
        seg = string[i:i+5]
        num = int(seg[2:4])
        if i == 0:
            mul = num
        else:
            res = (num + mul)%10007
            mul = (num * mul)%10007
    print(res%10007)




#b站笔试##B站#
全部评论
第一题所有数在一起求位或,计算这个值二进制里1的个数
点赞 回复 分享
发布于 2022-09-20 20:42 湖北
第一题位运算 ,第二题单调栈解决下一个更大元素,第三题维护一个数组所有元素的products,每次用products 除以当前遍历元素
点赞 回复 分享
发布于 2022-09-20 21:15 浙江

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务