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 }
  • 相关阅读:
    bzoj 1030: [JSOI2007]文本生成器
    hdu 2222 Keywords Search
    poj 2406 Power Strings
    poj 2752 Seek the Name, Seek the Fame
    ASP.NET中WebForms简介与搭建HelloWorld项目
    VisualStudio2017中新建项目没有Asp.Net项目
    C#中导出百万级Excel只需几秒除了NPOI还可以这样
    Winform中实现双击Dev的TreeList在ZedGraph中生成对应颜色的曲线
    Winform中设置ZedGraph在生成多条曲线时随机采用不同的颜色
    DevExpress的TreeList实现自定义节点NodeCell的背景颜色和前景色
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11934715.html
Copyright © 2011-2022 走看看