4.1 携程算法笔试

两道编程题:
1.找出数组中连续子数组的和等于n的字数组的数量
直接用滑动窗口,但是只A了80%,不知道是怎么回事
arr=[int(x) for x in input().split(',')]
n=int(input())
left=0
right=0
h=arr[left]
res=0
l=len(arr)-1
while right<l:
    while right<l and h<n:
            right+=1
            h += arr[right]
    if h==n:
        res+=1
        h -= arr[left]
        left += 1
    while left<=right and h>n:
            h-=arr[left]
            left+=1
    if h==n:
        res+=1
        if right + 1<l:
            right += 1
            h += arr[right]
print(res)

第2题,有n个果盘,每个果盘里有0个和多个苹果和梨,先要求尽可能多的选择果盘,使得苹果数和梨的数量不多于m和n个
输入:
# a,ppap,ap,aaappa,p 2 3
其中a代表苹果,p代表梨,果盘用逗号隔开,最后是m和n 
思路是动态规划,如果第i个果盘放入不会超出限制,则dp[i]=dp[i-1]+1,dp[i]表示在0-i个果盘中,最大的组合数
用三个数组来动态保存组合数,苹果数,梨数,也是只得了83%,有大佬可以看看问题在哪儿
 
s=input().split()
arr=s[0].split(',')
arr_t=[]
for i in range(len(arr)):
    tem=arr[i]
    a=0
    p=0
    for j in range(len(tem)):
        if tem[j]=='a':
            a+=1
        else:
            p+=1
    arr_t.append([a,p])
arr=arr_t
m=int(s[1])
n=int(s[2])
l=len(arr)+1
dpa=[0]*l
dpp=[0]*l
dp=[0]*l
res=0
for i in range(len(arr)):
    if arr[i][0]<=m and arr[i][1]<=n:
        dp[i+1]=1
for i in range(1,l):
    if dp[i]==0:
        # 果盘不能放入
        dp[i] = dp[i - 1]
        dpa[i] = dpa[i - 1]
        dpp[i] = dpp[i - 1]
    else:
        # 果盘能放入,遍历之前的结果,找到最大的组合
        max_t=dp[i]
        for j in range(i):
            if dpa[j] + arr[i-1][0] <= m and dpp[j] + arr[i-1][1] <= n:
                if dp[j] + 1>max_t:
                    dp[i] = dp[j] + 1
                    dpa[i] = dpa[j] + arr[i-1][0]
                    dpp[i] = dpp[j] + arr[i-1][1]
                    max_t=dp[j] + 1
        dp[i]=max_t
        res=max(res,dp[i])
print(res)

# a,ppap,ap,aaappa,p 2 3



#携程##算法工程师##笔经#
全部评论
你投的是算法?
点赞 回复
分享
发布于 2021-04-01 21:29
第一题我也是滑动窗口ac,感觉楼主写的有点麻烦啊,第二题我用的贪心做的,ac
点赞 回复
分享
发布于 2021-04-01 21:35
小红书
校招火热招聘中
官网直投
第一题是正数数组吗?如果有负数,需要用前缀和+哈希表做。 第二题感觉是二维0-1背包,用二维数组做就没问题了吧。
点赞 回复
分享
发布于 2021-04-02 22:08
请问lz笔试结果出来了吗
点赞 回复
分享
发布于 2021-04-07 09:44
楼主后来如何了?
点赞 回复
分享
发布于 2021-04-15 20:33
楼主最近有消息了吗
点赞 回复
分享
发布于 2021-04-22 14:27
想问问一共是几道题?是两个小时嘛~
点赞 回复
分享
发布于 2022-04-13 20:14

相关推荐

1 14 评论
分享
牛客网
牛客企业服务