微软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

相关推荐

剑桥断刀:找啥工作,牛客找个比如大厂软开或者随便啥的高薪牛马,大把没碰过妹子的技术仔,狠狠拿捏爆金币
点赞 评论 收藏
分享
zhiyog:我见过有的国央企需要填高考总分,但是这么详细的第一次见,无敌了
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务