字节跳动笔试08.28

第一题:20分,判断特征,哪些可以被计算,过了90%
n = int(input())
needs = [int(i) for i in input().split()]
relations = []
for i in range(n-1):
    relations.append([int(i) for i in input().split()])
dic = {}
for relation in relations:
    dic[relation[0]] = relation[1:]
ans = []
for j in needs:
    flag = False
    if j not in dic:
        ans.append(1)
    else:
        seta = dic[j]
        for item in seta:
            if item in dic:
                flag = True
                setb = dic[item]
                if j in setb:
                    ans.append(0)
                else:
                    ans.append(1)
        if not flag:
            ans.append(1)  
print(" ".join(str(i) for i in ans))
第二题:25分,输出最大子数组乘积位置,过了50%
n = int(input())
lens = []
subsets = []
for i in range(n):
    len_num = int(input())
    lens.append(len_num)
    subsets.append([int(i) for i in input().split()])
def minmul(lis):
    n = len(lis)
    dp = [1]*n
    l,r = 0,0
    res,ans = [],[]
    for i in range(n):
        if lis[i]==0:
            dp[i] = 0
        else:
            if i>=1 and lis[i-1]==0:
                dp[i]= lis[i]
            else:
                dp[i]= dp[i-1]*lis[i]         
    res = max(dp)
    for i,item in enumerate(dp):
        if item==0:
            l = i+1
        if res==item:
            r = i
            ans.append([l+1,r+1])
    return min(ans)
for subset in subsets:
    print(" ".join(str(i) for i in minmul(subset)))
第三题,25分,翻转一次,输出最大子数组和 尝试暴力,过了20%
n = int(input())
nums = ([int(i) for i in input().split()])
l,r = 0,0
ans = 0
def maxsum(nums):
    # 子数组最大和
    n = len(nums)
    dp = [0]*n
    for i in range(n):
        dp[i] = nums[i]   
    for i in range(1,n):
        dp[i] += max(dp[i-1],0)
    return max(dp)
for i in range(n):
    if nums[i]<0:
        l=i
        # 第二种是和后面的交换
        for j in range(i+1,n):
            if nums[j]>0:
                r = j
        if l!=r:
            nums[l:r+1] = nums[l:r+1][::-1]
            ans = max(ans,maxsum(nums))
            # 只能翻转一次,要翻转回去
            nums[l:r+1] = nums[l:r+1][::-1]

        # 第一种是和前面的交换
        for j in range(0,i):
            if nums[j]>0:
                r = j
        if l!=r:
            nums[l:r+1] = nums[l:r+1][::-1]
            ans = max(ans,maxsum(nums))
            nums[l:r+1] = nums[l:r+1][::-1]
print(ans)
第四题,30分,删去一个元素,输出K个元素子数组的最大和,暴力过了10%




#字节23秋招笔试太难了吧##字节跳动面试已完成#
全部评论
想问一下楼主面试准备了多久
点赞 回复 分享
发布于 2022-10-20 22:20 陕西

相关推荐

多多啊&nbsp;多多啊&nbsp;上来四道算法题算法题直播排序,整体比较简单把对象写出来,然后比较规则写明白就OK了。唯一一道A100%的电车充电如何最省钱,到目的地如何充电的钱最少,路上有充电站,每个电站价格不一样。用了DP来做,但感觉是贪心的样子,最后没招了,把不能到的情况给干了出来,过了8%日志分析纠错,滑动窗口,但我最后结果永远少一,过了15%没看,力竭了燃尽了多多&nbsp;以后牛客不用后台找我了,笔试夯爆了
淮竹c:不好意思,打扰大家🙏我是一个拼多多骑手,小电驴的最大电量为C,我的最大电量有1e9这么promax😭😭😭需要从x=0处走到x=L,L足足有1e9那么长处,途中有n个充电站,🙏🙏每个充电站的距离和电价分别为di和pi,初始电量是满的😭😭😭请告诉我到达终点最少要花多少钱😭😭😭求求大家把这些钱转给我
查看2道真题和解析
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务