中文english
給定乙個二維矩陣, 每乙個格仔可能是一堵牆w
,或者 乙個敵人e
或者空0
(數字 '0'), 返回你可以用乙個炸彈殺死的最大敵人數. 炸彈會殺死所有在同一行和同一列沒有牆阻隔的敵人。 由於牆比較堅固,所以牆不會被摧毀.
樣例1
輸入:
grid =[
"0e00",
"e0we",
"0e00"
]輸出: 3
解釋:把炸彈放在 (1,1) 能殺3個敵人
樣例2
輸入:
grid =[
"0e00",
"eewe",
"0e00"
]輸出: 2
解釋:p把炸彈放在 (0,0) 或 (0,3) 或 (2,0) 或 (2,3) 能殺2個敵人
你只能在空的地方放置炸彈.
輸入測試資料 (每行乙個引數)如何理解測試資料?
classsolution:
""" @param grid: given a 2d grid, each cell is either '
w', '
e' or '0'
@return: an integer, the maximum enemies you can kill
using
one bomb
"""'''
大致思路:
1.給出乙個方法,求出當前點可以襲擊的人數
2.內外迴圈,初始化max_num = 0,如果current_num >max_num,則更新,最終返回即可
'''def maxkilledenemies(self, grid):
if not grid:return
0max_num = 0
l_x,l_y = len(grid[0
]),len(grid)
#迴圈for x in
range(l_y):
for y in
range(l_x):
if grid[x][y] == '0'
: current_num =self.currentkilledenmies(x,y,grid)
if current_num >max_num:
max_num =current_num
return
max_num
def currentkilledenmies(self,x,y,grid):
#上下左右延伸,遇到牆則停止,遇到人則計數
current_num = 0
l_x = len(grid[0
]) l_y =len(grid)
a,b =x,y
#左右延伸,左邊走
j = 1
while y - j >= 0
:
if (grid[x][y - j] == 'e'
): current_num += 1
if (grid[x][y - j] == 'w'
):
break
j += 1
#右邊走
j = 1
while y + j <= l_x - 1
:
if (grid[x][y + j] == 'e'
): current_num += 1
if (grid[x][y + j] == 'w'
):
break
j += 1
#上面走
i = 1
while x - i >= 0
:
if (grid[x - i][y] == 'e'
): current_num += 1
if (grid[x - i][y] == 'w'
):
break
i += 1
#下面走
i = 1
while x + i <= l_y - 1
:
if (grid[x + i][y] == 'e'
): current_num += 1
if (grid[x + i][y] == 'w'
):
break
i += 1
return current_num
注:lintcode未通過,你的**執行時間超過了限制,檢查你的時間複雜度。
優化:
classsolution:
""" @param grid: given a 2d grid, each cell is either '
w', '
e' or '0'
@return: an integer, the maximum enemies you can kill
using
one bomb
"""'''
大致思路:
1.給出乙個方法,求出當前點可以襲擊的人數
2.內外迴圈,初始化max_num = 0,如果current_num >max_num,則更新,最終返回即可
'''def maxkilledenemies(self, grid):
m, n = len(grid), 0
ifm:
n = len(grid[0
]) result, rows = 0, 0
num_x = 0
cols = [0
for i in
range(n)]
for i in
range(m):
for j in
range(n):
#取出橫向座標當前位置開始,可能當前座標是0或者上乙個是牆壁,看右邊最多是多少人(緊貼0,和左邊牆壁看,所以不考慮左邊的人)
if j == 0 or grid[i][j-1] == 'w'
: num_x = 0
for k in
range(j, n):
if grid[i][k] == 'w'
:
break
if grid[i][k] == 'e'
: num_x += 1
#y軸
if i == 0 or grid[i-1][j] == 'w'
: cols[j] = 0
for k in
range(i, m):
if grid[k][j] == 'w'
:
break
if grid[k][j] == 'e'
: #這樣避免前面的被覆蓋掉,[
1,2...]前面大的不會被後面覆蓋掉,一直到出現w牆壁的時候,才會覆蓋前面的值
cols[j] += 1
if grid[i][j] == '
0' and num_x + cols[j] >result:
result = num_x +cols[j]
return result
lintcode 553 炸彈襲擊
給定乙個二維矩陣,每乙個格仔可能是一堵牆 w,或者 乙個敵人 e 或者空 0 數字 0 返回你可以用乙個炸彈殺死的最大敵人數.炸彈會殺死所有在同一行和同一列沒有牆阻隔的敵人。由於牆比較堅固,所以牆不會被摧毀.樣例 樣例1輸入 grid 0e00 e0we 0e00 輸出 3解釋 把炸彈放在 1,1 ...
炸彈襲擊 LintCode
描述 給乙個二維矩陣,每乙個格仔都可能是一堵牆 w,乙個敵人 e 或者空 0 數字 0 返回你可以用乙個炸彈殺死的最大敵人數.炸彈會殺死所有在同一行和同一列沒有牆阻隔的敵人,因為牆比較堅固難以摧毀.你只能在空的地方放置炸彈.樣例 給乙個矩陣 0e0 0e0 w e0e 00返回 3.在 1,1 處放...
553 最優除法 python
題 給定一組正整數,相鄰的整數之間將會進行浮點除法操作。例如,2,3,4 2 3 4 要找出怎麼新增括號,才能得到最大的結果,並且返回的表示式不應該含有冗餘的括號。法 可以發現nums中第乙個數永遠在分子上,第二個數永遠作為被除數在分母上,那麼如果後面的數都可以在分子上,就可以獲得最大結果。所以根據...