給定乙個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。bfs,首先遍歷一次矩陣,將值為0的點都存入queue,不停的更新其周圍未訪問過的每乙個1的距離兩個相鄰元素間的距離為 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。
矩陣中的元素只在四個方向上相鄰: 上、下、左、右。
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...