Minimum Water Level Cannot Pass
Question
Example:
[ [S,3,1]
[2,1,3]
[2,1,E] ]
Return 2Solution
class Node {
int x = 0;
int y = 0;
int val = 0;
Node(int x, int y, int val) {
this.x = x;
this.y = y;
this.val = val;
}
}
private final int[][] dir = new int[][]{{-1,0},{1,0},{0,-1},{0,1}};
public int minWaterLevel(char[][] height) {
int m = height.length;
int n = height[0].length;
int min = Integer.MAX_VALUE;
Queue<Node> pq = new PriorityQueue<>((a,b)->b.val-a.val);
Set<String> visited = new HashSet<>();
pq.add(new Node(0,0,Integer.MAX_VALUE));
visited.add(String.valueOf(0)+","+String.valueOf(0));
while(true) {
Node curNode = pq.poll();
System.out.println(curNode.x+","+curNode.y);
min = Math.min(min,curNode.val);
int x = curNode.x;
int y = curNode.y;
for(int[] i:dir) {
if(x+i[0]<0 || x+i[0]>=m || y+i[1]<0 || y+i[1]>=n) continue;
String tmp = String.valueOf(x+i[0])+","+String.valueOf(y+i[1]);
if(!visited.contains(tmp)) {
if(height[x+i[0]][y+i[1]]=='E') return min+1;
pq.add(new Node(x+i[0],y+i[1],height[x+i[0]][y+i[1]]-'0'));
visited.add(tmp);
}
}
}
}Last updated