微软8.13笔试(python版)

code1 [5,19,8,1]输出3 19/2/2+8/2共计3次
遍历列表每次对最大值除2,三个测试案例都能过复杂度应该也还可以
def solution(A):
    A.sort()
    target = sum(A)/2
    A = A[::-1]
    if len(A)<=2:
        return len(A)
    B = A[:]
    res,count = 0,0
    while res<target:
        temp = []
        m = max(B)/2
        res += m
        indx = B.index(m*2)
        B[indx] = m
        count += 1
    return count
code2 给X,Y两个数组,分别代表分子分母,求X[i]/Y[i]+X[j]/Y[j] =1的对数
没想到特别好的优化方法,其实也就是暴力找解,但是在循环过程中增加了判断条件减少循环次数,三个测试案例同样也过了,但是可能时间复杂度会超
def solution(X,Y):
    count = 0
    for i in range(len(X)-1):
        target = X[i]/Y[i]
        if target >=1:
            continue
        for j in range(i+1,len(Y)):
            m = min(X[j:len(X)])/min(Y[j:len(Y)])
            if m+target >1:
                break
            elif target+(X[i]/Y[j])==1:
                count += 1
    return count
code3 我理解就是步长为Y,在列表中找X个数,求和最小,3个测试案例过了
A=[4,2,3,7] X=2,Y=2,return 7=4+3 思路其实也挺简单,依次按照步长Y,个数X去遍历列表,添加到temp中,如果temp元素个数=X,那在target列表中求个和,最后输出最小cost的那个
def solution(A,X,Y):
    target = []
    for i in range(len(A)-Y):
        temp = []
        step = i
        for j in range(X):
            temp.append(A[step])
            if step+Y>=len(A):
                break
            else:
                step += Y
        if len(temp) == X:
            target.append(sum(temp))
    return min(target)
最后,欢迎大家讨论啊,我挺菜的 ,考试130分钟只能想到这些方法去解答




#微软笔试##秋招##Python#
全部评论
跟楼主写的差不多,也是对第二题其他用例没有太大信心。话说这个考完了不能查成绩可真是太难受了😑
1
送花
回复
分享
发布于 2022-08-15 10:27
我第三题的思路和你一样 但是我上午刷的时候大家都说用动态规划 我在想如果步长固定的话 动态规划真的有必要吗?
点赞
送花
回复
分享
发布于 2022-08-13 16:09
秋招专场
校招火热招聘中
官网直投
第一题用最大堆会好一点,第二题用dict+gcd会好一点
点赞
送花
回复
分享
发布于 2022-08-15 13:41

相关推荐

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