zoukankan      html  css  js  c++  java
  • LeetCode 934. Shortest Bridge

    原题链接在这里:https://leetcode.com/problems/shortest-bridge/

    题目:

    In a given 2D binary array A, there are two islands.  (An island is a 4-directionally connected group of 1s not connected to any other 1s.)

    Now, we may change 0s to 1s so as to connect the two islands together to form 1 island.

    Return the smallest number of 0s that must be flipped.  (It is guaranteed that the answer is at least 1.)

    Example 1:

    Input: [[0,1],[1,0]]
    Output: 1
    

    Example 2:

    Input: [[0,1,0],[0,0,0],[0,0,1]]
    Output: 2
    

    Example 3:

    Input: [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]]
    Output: 1

    Note:

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

    题解:

    Find an index pointing to 1. Starting from it, iterating its neighbors and put all the islands into first set.

    Perform BFS for each index in the current set, search surroundings, it is never visited before, and it is 1, then it is a cell in the other island, return level.

    Otherwise, it is water, add it to nextSet.

    Time Complexity: O(m*n). m = A.length. n = A[0].length.

    Space: O(m*n).

    AC Java:

     1 class Solution {
     2     int [][] dirs = new int[][]{{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
     3     public int shortestBridge(int[][] A) {
     4         if(A == null || A.length == 0 || A[0].length == 0){
     5             return -1;
     6         }
     7         
     8         int m = A.length;
     9         int n = A[0].length;
    10         int r = 0;
    11         int c = 0;
    12         for(int i = 0; i<m; i++){
    13             for(int j = 0; j<n; j++){
    14                 if(A[i][j] == 0){
    15                     continue;
    16                 }
    17                 
    18                 r = i;
    19                 c = j;
    20             }
    21         }
    22         
    23         boolean [][] visited = new boolean[m][n];
    24         LinkedList<int []> que = new LinkedList<>();
    25         HashSet<int []> beginSet = new HashSet<>();
    26         visited[r][c] = true;
    27         que.add(new int[]{r,c});
    28         while(!que.isEmpty()){
    29             int [] cur = que.poll();
    30             beginSet.add(cur);
    31             for(int [] dir : dirs){
    32                 int x = cur[0] + dir[0];
    33                 int y = cur[1] + dir[1];
    34                 if(x<0 || x>=m || y<0 || y>=n || A[x][y]!= 1 || visited[x][y]){
    35                     continue;
    36                 }
    37                 
    38                 visited[x][y] = true;
    39                 que.add(new int[]{x, y});
    40             }
    41         }
    42         
    43         int level = 0;
    44         
    45         while(!beginSet.isEmpty()){
    46             HashSet<int []> nextSet = new HashSet<>();
    47             for(int [] node : beginSet){
    48                 for(int [] dir : dirs){
    49                     int x = node[0] + dir[0];
    50                     int y = node[1] + dir[1];
    51                     if(x<0 || x>=m || y<0 || y>=n || visited[x][y]){
    52                         continue;
    53                     }
    54                     
    55                     visited[x][y] = true;
    56                     if(A[x][y] == 1){
    57                         return level;
    58                     }
    59                     
    60                     nextSet.add(new int[]{x, y});
    61                 }
    62             }
    63             
    64             level++;
    65             beginSet = nextSet;
    66         }
    67         
    68         return -1;
    69     }
    70 }
  • 相关阅读:
    从搜索引擎角度看SEO
    关键词排名与网站优化有哪三大误区?
    真正提升关键词排名的外链应该怎样发?
    高质量外链的十大特性
    四个方面分析SEO如何提高网站的权重
    Linux(ubuntu)使用dd从iso制作win7安装u盘(读卡器一样),以及备份分区
    折腾slidingmenu
    生命游戏介绍
    21232f297a57a5a743894a0e4a801fc3
    final关键字
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11934715.html
Copyright © 2011-2022 走看看