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
  • 相关阅读:
    C#自定义控件之数字文本框
    C# 校验字符串是否为IP格式
    C# winform 解决加载闪烁,背景透明等问题
    SQL Server 数据类型
    C#自定义控件之下拉列表框
    C#将 byte[ ] 转换为对应的struct
    AFNetworking图片上传
    xfs删除oracle数据文件恢复
    揭秘String类型背后的故事——带你领略汇编语言魅力
    [批处理]截取for命令里面的变量%%i
  • 原文地址:https://www.cnblogs.com/seyjs/p/11376628.html
Copyright © 2011-2022 走看看