博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shortest Distance from All Buildings
阅读量:5874 次
发布时间:2019-06-19

本文共 2476 字,大约阅读时间需要 8 分钟。

1 public class Solution { 2     public int shortestDistance(int[][] grid) { 3         if (grid.length == 0 || grid[0].length == 0) { 4             return -1; 5         } 6          7         int[] shift = new int[]{0, 1, 0, -1, 0}; 8         int[][] distance = new int[grid.length][grid[0].length]; 9         int[][] reach = new int[grid.length][grid[0].length];10         int numBuildings = 0;11         for (int i = 0; i < grid.length; i++) {12             for (int j = 0; j < grid[0].length; j++) {13                 if (grid[i][j] == 1) {14                     int level = 1;15                     numBuildings++;16                     boolean[][] visited = new boolean[grid.length][grid[0].length];17                     Queue
queue = new LinkedList<>();18 queue.offer(new int[]{i, j});19 while (!queue.isEmpty()) {20 int size = queue.size();21 for (int k = 0; k < size; k++) {22 int[] current = queue.poll();23 for (int l = 0; l < 4; l++) {24 int x = current[0] + shift[l];25 int y = current[1] + shift[l + 1];26 if (x >= 0 && x < grid.length && y >= 0 && y < grid[0].length && !visited[x][y] && grid[x][y] == 0) {27 visited[x][y] = true;28 distance[x][y] += level;29 reach[x][y]++;30 queue.offer(new int[]{x, y});31 }32 }33 }34 level++;35 }36 }37 }38 }39 40 int result = Integer.MAX_VALUE;41 for (int i = 0; i < grid.length; i++) {42 for (int j = 0; j < grid[0].length; j++) {43 if (grid[i][j] == 0 && reach[i][j] == numBuildings) {44 result = Math.min(result, distance[i][j]);45 }46 }47 }48 return result == Integer.MAX_VALUE ? -1 : result;49 }50 }

Basic idea:

1. starting from each element expanding to all map. Find a 0, add one to reach, and level traversal to.

2. Go through each element again. Find the smallest distances.

转载于:https://www.cnblogs.com/shuashuashua/p/5642236.html

你可能感兴趣的文章
找回使用Eclipse删除的文件
查看>>
移动开发Html 5前端性能优化指南
查看>>
《系统架构师》——操作系统和硬件基础
查看>>
如何看待一本图书
查看>>
Linux 中如何通过命令行访问 Dropbox
查看>>
开发进度——4
查看>>
JS里验证信息
查看>>
Akka actor tell, ask 函数的实现
查看>>
windows10 chrome 调试 ios safari 方法
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
MR1和MR2的工作原理
查看>>
Eclipse中修改代码格式
查看>>