2019网易校园招聘 - 算法平台开发工程师

第一题:输出元素个数统计,AC100%

n,m = [int(i) for i in input().split(' ')]
A = [int(i) for i in input().split(' ')]
A = sorted(A)
query  = []
for _ in range(m):
    query.append(int(input()))
m = {}.fromkeys(query)
for key in m.keys():
    m[key] = 0
for i in range(len(A)):
    if A[i]  in m:
        m[A[i]] += 1
for k in query:
    print(m[k])

 

第二题:有a,b,c三种糖果,有三个人吃,第一个人只吃ab,第二个人只吃bc,第三个人只吃ca,要求吃最多的人尽量吃少,问吃吃最多的人吃了多少,AC 30% 超时,求老哥告诉我怎么优化

def slove(a,b,c,aa,bb,cc):
    if(a==0 and b==0 and c==0):
        return max(aa,bb,cc)
    if(a>0):
        return min(slove(a-1,b,c,aa+1,bb,cc),slove(a-1,b,c,aa,bb,cc+1))
    elif(b>0):
        return min(slove(a,b-1,c,aa+1,bb,cc),slove(a,b-1,c,aa,bb+1,cc))
    elif(c>0):
        return min(slove(a,b,c-1,aa,bb,cc+1),slove(a,b,c-1,aa,bb+1,cc))

for _ in range(n):
    a,b,c = [int(i) for i in input().split(' ')]
    print(slove(a,b,c,0,0,0))

第三题:可以循环的列表里面(头尾相连),问能否找到一个划分,使得划分的两部分的和相等。 AC60% ,超时,求老哥告诉我怎么优化

for _ in range(c):
    input()
    A = [int(i) for i in input().split(' ')]
    sumA = sum(A)
    target = sumA//2
    if(sumA%2==1):
        print("NO")
        continue
    find = False
    # O(n^2)
    for i in range(len(A)):
        sum_local = 0
        for j in range(i+1,len(A)):
            sum_local += A[j]
            if(sum_local==target):
                print("YES")
                find = True
                break
        if find:
            break
    if not find:
        print("NO")

第四题:跳格子,每次最多可以跳k格,要求当前格子高度比跳跃过去的格子高度大,但是允许使用一次超能力,可以无视格子高度的条件,但是还是最多能跳k格。问能否跳跃到第n个格子。AC 100%

def zeros(n,m):
    return [[0 for i in range(m)] for j in range(n)]

def slove(A,k,super_power):
    n = len(A)
    dp = zeros(len(A),2)
    dp[n-1][0] = 1
    dp[n-1][1] = 1

    for i in range(n-1)[::-1]:
        for j in range(1,k+1):
            if i+j<n:
                if(dp[i][0]==0):
                    dp[i][0] = 1 if (A[i+j]<=A[i] and dp[i+j][0]==1) else 0
                if(dp[i][1]==0):
                    dp[i][1] = 1 if (A[i+j]<=A[i] and dp[i+j][1]==1) or(A[i+j]>A[i] and dp[i+j][0]==1) else 0
    return dp[0][1]

c = int(input())
for _ in range(c):
    n,k = [int(i) for i in input().split(' ')]
    A = [int(i) for i in input().split(' ')]
    if(slove(A,k,1)):
        print("YES")
    else:
        print("NO")

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值