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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM