leetcode542 微軟面試題 01 矩陣

2021-10-01 10:51:17 字數 1091 閱讀 9255

給定乙個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。

兩個相鄰元素間的距離為 1 。

示例 1:

輸入:0 0 0

0 1 0

0 0 0

輸出:0 0 0

0 1 0

0 0 0

示例 2:

輸入:0 0 0

0 1 0

1 1 1

輸出:0 0 0

0 1 0

1 2 1

注意:給定矩陣的元素個數不超過 10000。

給定矩陣中至少有乙個元素是 0。

矩陣中的元素只在四個方向上相鄰: 上、下、左、右。

bfs,首先遍歷一次矩陣,將值為0的點都存入queue,不停的更新其周圍未訪問過的每乙個1的距離

class solution(object):

def updatematrix(self, matrix):

""":type matrix: list[list[int]]

:rtype: list[list[int]]

"""q =

m = len(matrix)

n = len(matrix[0])

visited = set()

for i in range(m):

for j in range(n):

if matrix[i][j] == 0:

visited.add((i, j))

while q:

i,j = q.pop(0)

dirs = ((1,0),(-1,0),(0,1),(0,-1))

for k in range(4):

x = i+dirs[k][0]

y = j+dirs[k][1]

if 0 <= x < m and 0 <= y < n and (x, y) not in visited:

matrix[x][y] = matrix[i][j] + 1

visited.add((x, y))

return matrix

微軟面試 微軟面試題 3

微軟面試題 運算 鏈結表和陣列之間的區別是什麼?做乙個鏈結表,你為什麼要選擇這樣的方法?選擇一種演算法來整理出乙個鏈結表。你為什麼要選擇這種方法?現在用o n 時間來做。說說各種 分類演算法的優點和缺點。用一種演算法來顛倒乙個鏈結表的順序。現在在不用遞迴式的情況下做一遍。用一種演算法在乙個迴圈的鏈結...

微軟面試歸來

今下午 點到 點參加了微軟的面試,應聘正式員工。三小時三面,每一面正好一小時。記得大四應聘實習生職位時是兩面,也是每一面正好一小時。從這次面試來看,微軟的sde職位仍然比較注重演算法和資料結構基礎,諸如佇列 堆疊 樹 字串 等等。題目並不是很難,但是面試者需要有很好的編碼功底,以及將基礎的演算法知識...

微軟面試題模擬 蛇形矩陣Leetcode 54

1.先不要一上來就寫 先把問題的描述和邊界,以及思路和面試官說清楚。2.然後開始寫 3.寫 的時候,如leetcode那樣,實現乙個函式介面 這道題目使用o n 空間的簡潔做法,利用了矩陣的規律,vector在使用的時候注意提前申請好空間,避免用push back.比較簡單的一題。class sol...