笔试后:小马智行题目讨论

第一题:分糖果
n, k = 5, 10
A = [2,1,5,2,4]

tmp = []
for i in range(len(A)):
    tmp.append([A[i], i+1])

tmp.sort(key=lambda x: x[0])

target = k
n = len(A)
pre = 0
for i in range(len(tmp)):
    if (tmp[i][0] - pre) * n < target:
        target -= (tmp[i][0] - pre) * n
        pre = tmp[i][0]
        n = len(A) - i - 1
    elif (tmp[i][0] - pre) * n == target:
        print(len(A))
    else:
        break

index = target % n
candidate = tmp[i:]
candidate.sort(key=lambda x:x[1])
print(candidate[index-1][1])
第二题:
递归:也错了(30%)
import functools  nums = list(map(int, input().split(" ")))
n, m = nums[0], nums[1]

arr = [[0] * m for _ in range(n)]

def trans(s):
    if s == '^':
        return (-1, 0)
    elif s == 'v':
        return (1, 0)
    elif s == '<':
        return (0, -1)
    elif s == '>':
        return (0, 1)
    else:
        return (5, 5)

for i in range(n):
    ss = list(input())
    for j in range(m):
        arr[i][j] = trans(ss[j])

flag = [[0] * m for _ in range(n)]  @functools.lru_cache(None) def dfs(i, j):
    if i < 0&nbs***bsp;j < 0&nbs***bsp;i == n&nbs***bsp;j == m:
        return 0

    if flag[i][j] == 1:
        flag[i][j] = 0
        return 0

    flag[i][j] = 1
    cur_i, cur_j = arr[i][j]
    dist = dfs(i+cur_i, j+cur_j)
    flag[i][j] = 0
    return dist + 1

maxlength = 0
for i in range(n):
    for j in range(m):
        if dist[i][j] == -1:
            maxlength = max(maxlength, dfs(i, j))

print(maxlength)
非递归:错了(10%)
nums = list(map(int, input().split(" ")))
n, m = nums[0], nums[1]

arr = [[0] * m for _ in range(n)]

def trans(s):
    if s == '^':
        return (-1, 0)
    elif s == 'v':
        return (1, 0)
    elif s == '<':
        return (0, -1)
    else:
        return (0, 1)

for i in range(n):
    ss = list(input())
    for j in range(m):
        arr[i][j] = trans(ss[j])

flag = [[0] * m for _ in range(n)]
dist = [[-1]*m for _ in range(n)]

def dfs(i, j):
    stack = []
    sign = True
    ring = None
    while stack&nbs***bsp;sign == True:
        sign = False
        if i < 0&nbs***bsp;j < 0&nbs***bsp;i == n&nbs***bsp;j == m:
            break

        if flag[i][j] == 1:
            ring = (i, j)
            break

        if dist[i][j] != -1:
            curdist = dist[i][j]
            for i in range(len(stack) - 1, -1, -1):
                cur_i, cur_j = stack[i]
                curdist += 1
                dist[cur_i, cur_j] = curdist
            return curdist

        flag[i][j] = 1
        stack.append((i, j))
        next_i, next_j = arr[i][j]
        i, j = i + next_i, j +next_j

    if not ring:
        curdist = 0
        for i in range(len(stack)-1, -1, -1):
            cur_i, cur_j = stack[i]
            curdist += 1
            dist[cur_i][cur_j] = curdist
    else:
        curdist = 0
        index = 0
        for i in range(len(stack)-1, -1, -1):
            cur_i, cur_j = stack[i]
            curdist += 1
            if cur_i == ring[0] and cur_j == ring[1]:
                index = i
                break
        for i in range(len(stack)-1, -1, -1):
            cur_i, cur_j = stack[i]
            if i > index:
                dist[cur_i][cur_j] = curdist
            else:
                curdist += 1
                dist[cur_i][cur_j] = curdist

    return curdist

maxlength = 0
for i in range(n):
    for j in range(m):
        if dist[i][j] == -1:
            maxlength = max(maxlength, dfs(i, j))

print(maxlength)
第三题:没有看见不可以重复使用,写的动态规划的子序列问题,我说我怎么总比答案多



#小马智行笔试#
全部评论
nnd,用pre存每个人已经到手的糖,我怎么想不到😤每次都从数组里减去,难怪超时。
2 回复 分享
发布于 2022-09-16 22:41 北京
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-19 08:17 北京
有兴趣试试华勤技术吗,我主页有校招详情和内推码
点赞 回复 分享
发布于 2022-09-16 23:32 江苏
第一题100%希望大哥们分享一下其他思路
点赞 回复 分享
发布于 2022-09-16 22:34 北京

相关推荐

小时候觉得老师是很伟大的职业&nbsp;感觉老师都是人中龙凤才能当&nbsp;后来考入大学&nbsp;发现以前的老同学也是公费师范生了&nbsp;他们什么样什么人品&nbsp;我还不清楚吗&nbsp;只能希望他们以后也会有改变&nbsp;要不纯属耽误孩子&nbsp;实习之后发现&nbsp;有的领导&nbsp;能当上领导也可能运气成分很多&nbsp;自己决策方面很差&nbsp;分配给属下的东西自己也说不明白&nbsp;&nbsp;前些年那些明星&nbsp;各种塌房&nbsp;少林寺大师都能有情人和孩子&nbsp;越长大越发现世界就是个草台班子&nbsp;以前对不懂的东西有一层羡慕的滤镜&nbsp;接触之后发现就不是那回事了
RazerYang:其实也是幸存者偏差,你只关注草台班子的部分,所以觉得世界都是草台班子。实际上你每天能安全地从床上醒来,有稳定的天然气、自来水和电力供应,能让你吃上热乎的饭菜,能收到持续稳定的信号去刷手机,花几块钱就能坐地铁从城市的一端快速移动到另一端,花几百块就能在一天之内安全穿越整个国家,这都不是一个草台班子能实现的。燃气、水利、电力、通信、公交、民航,还有最重要的公安和国防,这些都不是草台班子能做的,有无数普通人构筑了你生活的方方面面,而你也将加入他们。
我对___祛魅了
点赞 评论 收藏
分享
挂的真快
投递小鹏汽车等公司10个岗位
点赞 评论 收藏
分享
夕颜不需要停机维护:xd能把idea都写上去那说明是真没得写了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 16:13
点赞 评论 收藏
分享
评论
2
14
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务