Py3 cpp BFS /heap解Leetcode難題407 Trapping Rain Water II
解題要訣:boundary由外而內,容器採min heap,BFS走訪
[Py3解請進]
-----
Tips for solving problems: boundary from outside toward inside, container using min heap, BFS transversal
[codes on Leetcode]https://leetcode.com/problems/trapping-rain-water-ii/solutions/6300513/bfs-over-min-heap11ms-beats-9890-by-anwe-qwz4/
[Tree/Graph Playlist]https://www.youtube.com/watch?v=bna7aw7dkPY&list=PLYRlUBnWnd5Kt0-3un43cwY6yT_il8NWe
class Solution: def trapRainWater(self, height: List[List[int]]) -> int: dir = (0, 1, 0, -1, 0) m, n = len(height), len(height[0]) if m <= 2 or n <= 2: return 0 boundary = [] for i in range(m): boundary.append((height[i][0], i, 0)) boundary.append((height[i][-1], i, n - 1)) height[i][0] = height[i][-1] = -1 for j in range(1, n - 1): boundary.append((height[0][j], 0, j)) boundary.append((height[-1][j], m - 1, j)) height[0][j] = height[-1][j] = -1 heapify(boundary) ans, water_level = 0, 0 while boundary: h, i, j = heappop(boundary) water_level = max(water_level, h) for a in range(4): i0, j0 = i + dir[a], j + dir[a + 1] if i0 < 0 or i0 >= m or j0 < 0 or j0 >= n or height[i0][j0] == -1: continue currH = height[i0][j0] if currH < water_level: ans += water_level - currH height[i0][j0] = -1 heappush(boundary, (currH, i0, j0)) return ans
沒有留言:
張貼留言