百度2018年春招编程题第二题解析

      今年百度第二题相对简单,有人用动态规划做,但是用简单的递归方式在几分钟之内就可以写出答案,以下两张图片就是考试时候的图片,是手机拍下来的,可能质量不太好。想必网上已经有相关的文档了。


      其实我们可以把它理解成一个多叉树的查找问题。树这种查找结构用递归的方式很好解决,并且代码也很简洁。我是使用python语言编写的,通过了他们给的用例,现在我把我写的答案贴出来,供大家参考。

import numpy as np


def n_m(data, sx, sy, n, m):
    s1 = 0
    s2 = 0
    s3 = 0
    s4 = 0
    if sy - 1 >= 1:
        s1 = data[sx - 1][sy - 2]
    if sy + 1 <= n:
        s2 = data[sx - 1][sy]
    if sx - 1 >= 1:
        s3 = data[sx - 2][sy - 1]
    if sx + 1 >= 1:
        s4 = data[sx][sy - 1]
    cur = data[sx - 1][sy - 1]
    if cur >= max(max(s1, s2), max(s3, s4)):
        return cur
    else:
        if s1 > cur:
            return n_m(data, sx, sy - 1, n, m)
        if s2 > cur:
            return n_m(data, sx, sy + 1, n, m)
        if s3 > cur:
            return n_m(data, sx - 1, sy + 1, n, m)
        if s4 > cur:
            return n_m(data, sx + 1, sy + 1, n, m)

test = np.array([[1, 5, 2],
                 [0, 4, 9]])
# test = np.array([[2, 1],
#                  [1, 3]])
print('out_put:', n_m(test, 1, 1, 2, 2))
输出结果------> out_put: 5


猜你喜欢

转载自blog.csdn.net/weixin_38358654/article/details/79998818
今日推荐