9.16深信服笔试Python代码

42分填空,58分编程

填空题基本都是智商题和算法基础,没啥大的难度

四道编程题也不难,基本没用到什么算法,除了第一题LRU看错题意了在50%耗了半天,其他题基本都是1A

没给数据范围,默认全部能暴力,没动什么脑子就过了

九点放代码

UPD:

第一题

模拟LRU

一直处于只知道原理但没做过的状态。。。开始是以为搞个双端队列先进先出就完事了,结果只过了50%。后来发现还有次数要求,然后搞了个关键字排序,发现也不对。出来之后发现有力扣原题,读了下题解发现自己题意理解错了(不写力扣导致的

30%代码(50%的被覆盖了)

def solve1():
    n, m = map(int, input().split())

    q = []
    for i in range(m):
        s = input().split()
        op = s[0]
        # print(*q)
        if op == "s":
            k, v = int(s[1]), int(s[2])
            if len(q) < n:
                q.append([1, k, v])
            else:
                q.sort(reverse=True)
                q.pop()
                q.append([1, k, v])
        else:
            temp = int(s[1])
            for j in q:
                if j[1] == temp:
                    print(j[2])
                    t = j
                    q.remove(j)
                    q.append([t[0] + 1, t[1], t[2]])
                    break
            else:
                print(-1)
                # pass

第二题

模拟正则匹配中的*和.,a串是目标串,b串是模式串,匹配成功输出1,失败则输出0,用内置库得0分

两个指针照着题意模拟一下就行了,没什么好说的

def solve2():
    a = input()
    b = input()

    n = len(a)
    ok = 1
    last = ""
    i, j = 0, 0
    while i < n:
        if a[i] == b[j]:
            i += 1
            j += 1
            continue
        else:
            if b[j] == ".":
                i += 1
                j += 1
            elif b[j] == "*":
                while i < n and b[j - 1] == a[i]:
                    i += 1
                j += 1
            else:
                ok = 0

    print(ok)

第三题

给定一串数字,求此数字循环往右的过程中的最大值,例如1324循环的结果最大是4132

C语言作业难度

def solve3():
    n = input()
    mx = -1
    for i in n:
        mx = max(mx, int(i))
    pos = []
    for i in range(len(n)):
        if int(n[i]) == mx:
            pos.append(i)

    ans = []
    for i in pos:
        ans.append(int(n[i:] + n[:i]))
    print(max(ans))

第四题

给定字符串A和字符串B,求在字符串A中能找到包含字符串B的字串的最小长度(包含字符串B:即该字串含有字符串B的全部字母,不论顺序)

双指针+暴力搞一搞就行了,没给数据范围一律默认可以暴力

听说是典题,但没写过,代码有点丑,但能过的代码就是好代码((

def solve4():
    temp = input().split(",")
    a = temp[0][1:-1]
    b = temp[1][1:-1]
    n = len(a)
    d = [0] * 29
    for i in b:
        d[ord(i) - ord('A')] += 1
    ans = []
    now = [0] * 29
    l, r = 0, 0

    def check():
        ok = 1
        for i in range(28):
            if now[i] < d[i]:
                ok = 0
                break
        return ok
    if b.find(a[l]) != -1:
        now[ord(a[l]) - ord('A')] += 1
    while r < n:
        ok = 0
        for i in range(28):
            if now[i] < d[i]:
                ok = 1
                break
        if ok:
            r += 1
            if r < n and b.find(a[r]) != -1:
                now[ord(a[r]) - ord('A')] += 1
            continue
        ans.append(a[l:r + 1])

        while check() and l < n:
            # print(l)
            if b.find(a[l]) != -1:
                now[ord(a[l]) - ord('A')] -= 1
                ans.append(a[l:r + 1])
            l += 1
    # print(ans)
    mi = 1 << 31
    for i in ans:
        mi = min(mi, len(i))
    for i in ans:
        if len(i) == mi:
            print(f'"{i}"')
            return
    print('""')

#我的求职思考#
全部评论
佬,我是基本没a出来
点赞 回复 分享
发布于 2023-09-16 18:32 江苏
蹲代码一个没a出来
点赞 回复 分享
发布于 2023-09-16 21:02 四川
佬,我只a了3
点赞 回复 分享
发布于 2023-09-16 21:50 江苏

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 11 评论
分享
牛客网
牛客企业服务