zoukankan      html  css  js  c++  java
  • 【leetcode】1162. As Far from Land as Possible

    题目如下:

    Given an N x N grid containing only values 0 and 1, where 0 represents water and 1 represents land, find a water cell such that its distance to the nearest land cell is maximized and return the distance.

    The distance used in this problem is the Manhattan distance: the distance between two cells (x0, y0)and (x1, y1) is |x0 - x1| + |y0 - y1|.

    If no land or water exists in the grid, return -1.

    Example 1:

    Input: [[1,0,1],[0,0,0],[1,0,1]]
    Output: 2
    Explanation: 
    The cell (1, 1) is as far as possible from all the land with distance 2.
    

    Example 2:

    Input: [[1,0,0],[0,0,0],[0,0,0]]
    Output: 4
    Explanation: 
    The cell (2, 2) is as far as possible from all the land with distance 4.
    

    Note:

    1. 1 <= grid.length == grid[0].length <= 100
    2. grid[i][j] is 0 or 1

    解题思路:题目不难,注意用BFS,如果用DFS会超时。

    代码如下:

    class Solution(object):
        def maxDistance(self, grid):
            """
            :type grid: List[List[int]]
            :rtype: int
            """
            val = [[float('inf')] * len(grid[0]) for _ in grid]
            queue = []
    
            for i in range(len(grid)):
                for j in range(len(grid[i])):
                    if grid[i][j] == 1:
                        queue.append((i, j, 0))
    
            direction = [(0, 1), (0, -1), (1, 0), (-1, 0)]
            while len(queue) > 0:
                x, y, dis = queue.pop(0)
                for (x1, y1) in direction:
                    if x + x1 >= 0 and x + x1 < len(grid) and y + y1 >= 0 
                            and y + y1 < len(grid[0]) and grid[x + x1][y + y1] == 0 
                            and val[x + x1][y + y1] > dis + 1:
                        val[x + x1][y + y1] = dis + 1
                        queue.append((x + x1, y + y1, dis + 1))
    
            res = -1
            for i in range(len(val)):
                for j in range(len(val[i])):
                    if val[i][j] != float('inf') and res < val[i][j]:
                        res = val[i][j]
    
            return res
  • 相关阅读:
    crtmpserver流媒体服务器的介绍与搭建
    RTMP流媒体服务器 crtmpserver
    red5-server源码:https://github.com/Red5/red5-server
    C++实现RTMP协议发送H.264编码及AAC编码的音视频
    linux 下Time_wait过多问题解决
    Tomcat调优配置技巧集锦
    Tomcat调优总结
    LeetCode题解之 Longest Common Prefix
    LeetCode题解之Longest Continuous Increasing Subsequence
    LeetCode题解之Longest Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/seyjs/p/11376628.html
Copyright © 2011-2022 走看看