当前位置: 代码迷 >> 综合 >> LeetCode1162. 地图分析
  详细解决方案

LeetCode1162. 地图分析

热度:79   发布时间:2023-12-15 03:18:03.0

1162. 地图分析

解题思路:动态规划

1、当前坐标距离为上下左右距离最小值+1

2、两次距离计算,第一次以上左为参照,第二次以下右为参照,如果是陆地标记为 0

3、maxDistance 记录最大距离

public int maxDistance(int[][] grid) {
    int maxDistance = -1;int[][] distance = new int[grid.length][grid[0].length];// 初始化for (int[] ints : distance) {
    Arrays.fill(ints, Integer.MAX_VALUE-1);}// 第一次距离计算,以上左为参照,是陆地则初始化为 1for (int i = 0; i < grid.length; i++) {
    for (int j = 0; j < grid[i].length; j++) {
    if (grid[i][j] == 1) {
    distance[i][j] = 0;continue;}if (i - 1 >= 0) {
    distance[i][j] = Math.min(distance[i][j], distance[i - 1][j] + 1);}if (j - 1 >= 0) {
    distance[i][j] = Math.min(distance[i][j], distance[i][j - 1] + 1);}}}// 第二次距离计算,以右下为参照,同时更新最大 maxDistancefor (int i = grid.length - 1; i >= 0; i--) {
    for (int j = grid[0].length - 1; j >= 0; j--) {
    if (grid[i][j] == 1) {
    continue;}if (i + 1 < grid.length) {
    distance[i][j] = Math.min(distance[i][j], distance[i + 1][j] + 1);}if (j + 1 < grid[i].length) {
    distance[i][j] = Math.min(distance[i][j], distance[i][j + 1] + 1);}maxDistance = Math.max(distance[i][j], maxDistance);}}// 对于全为海洋情况进行特殊处理return maxDistance == Integer.MAX_VALUE - 1 ? -1 : maxDistance;}