百度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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章