zoukankan      html  css  js  c++  java
  • LeetCode 1102. Path With Maximum Minimum Value

    原题链接在这里:https://leetcode.com/problems/path-with-maximum-minimum-value/

    题目:

    Given a matrix of integers A with R rows and C columns, find the maximum score of a path starting at [0,0] and ending at [R-1,C-1].

    The score of a path is the minimum value in that path.  For example, the value of the path 8 →  4 →  5 →  9 is 4.

    path moves some number of times from one visited cell to any neighbouring unvisited cell in one of the 4 cardinal directions (north, east, west, south).

    Example 1:

    Input: [[5,4,5],[1,2,6],[7,4,6]]
    Output: 4
    Explanation: 
    The path with the maximum score is highlighted in yellow. 
    

    Example 2:

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

    Example 3:

    Input: [[3,4,6,3,4],[0,2,1,1,7],[8,8,3,2,7],[3,2,4,9,8],[4,1,2,0,0],[4,6,5,4,3]]
    Output: 3

    Note:

    1. 1 <= R, C <= 100
    2. 0 <= A[i][j] <= 10^9

    题解:

    From A[0][0], put element with index into maxHeap, sorted by element. Mark it as visited.

    When polling out the currrent, check its surroundings. If not visited before, put it into maxHeap.

    Until we hit the A[m-1][n-1].

    Time Complexity: O(m*n*logmn). m = A.length. n = A[0].length. maxHeap add and poll takes O(logmn).

    Space: O(m*n).

    AC Java:

     1 class Solution {
     2     int [][] dirs = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
     3     
     4     public int maximumMinimumPath(int[][] A) {
     5         int m = A.length;
     6         int n = A[0].length;
     7         
     8         PriorityQueue<int []> maxHeap = 
     9             new PriorityQueue<int []>((a, b) -> b[2] - a[2]);
    10         maxHeap.add(new int[]{0, 0, A[0][0]});
    11         boolean [][] visited = new boolean[m][n];
    12         visited[0][0] = true;
    13         
    14         int res = A[0][0];
    15         while(!maxHeap.isEmpty()){
    16             int [] cur = maxHeap.poll();
    17             res = Math.min(res, cur[2]);
    18             if(cur[0]==m-1 && cur[1]==n-1){
    19                 return res;
    20             }
    21             
    22             for(int [] dir : dirs){
    23                 int x = cur[0] + dir[0];
    24                 int y = cur[1] + dir[1];
    25                 if(x<0 || x>=m ||y<0 || y>=n || visited[x][y]){
    26                     continue;
    27                 }
    28                 
    29                 visited[x][y] = true;
    30                 maxHeap.add(new int[]{x, y, A[x][y]});
    31             }
    32         }
    33         
    34         return res;
    35     }
    36 }
  • 相关阅读:
    基于Lumisoft.NET组件开发碰到乱码等一些问题的解决
    Winform开发框架之混合型框架的剖析
    Winform开发框架之通用人员信息管理
    Database2Sharp之混合型Winform框架代码生成
    python3 小技巧(2)
    Python小技巧1
    详解Python模块导入方法
    常见HTTP状态(304,200等)
    python win32api 使用小技巧
    python3下的IE自动化模块PAMIE
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11297106.html
Copyright © 2011-2022 走看看