Skip to content

Commit e96eb19

Browse files
committed
Added 2 solutions & modified 1 solution
1 parent 0bf67a9 commit e96eb19

File tree

3 files changed

+102
-29
lines changed

3 files changed

+102
-29
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
class Solution {
2+
int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
3+
public int shortestDistance(int[][] grid) {
4+
int numOfHouses = 0;
5+
for (int i = 0; i < grid.length; i++) {
6+
for (int j = 0; j < grid[0].length; j++) {
7+
numOfHouses += grid[i][j] == 1 ? 1 : 0;
8+
}
9+
}
10+
int[] distance = {Integer.MAX_VALUE};
11+
for (int i = 0; i < grid.length; i++) {
12+
for (int j = 0; j < grid[0].length; j++) {
13+
if (grid[i][j] == 0) {
14+
bfs(grid, i, j, numOfHouses, distance);
15+
}
16+
}
17+
}
18+
return distance[0] == Integer.MAX_VALUE ? -1 : distance[0];
19+
}
20+
21+
private void bfs(int[][] grid, int i, int j, int numOfHouses, int[] distance) {
22+
int currDistance = 0;
23+
int numRows = grid.length;
24+
int numCols = grid[0].length;
25+
int houses = 0;
26+
boolean[][] visited = new boolean[numRows][numCols];
27+
Queue<int[]> queue = new LinkedList<>();
28+
queue.add(new int[]{i, j, 0});
29+
visited[i][j] = true;
30+
while (!queue.isEmpty() && houses != numOfHouses) {
31+
int size = queue.size();
32+
while (size-- > 0) {
33+
int[] removed = queue.remove();
34+
int x = removed[0];
35+
int y = removed[1];
36+
if (grid[x][y] == 1) {
37+
houses++;
38+
currDistance += removed[2];
39+
}
40+
else if (grid[x][y] == 0) {
41+
for (int[] dir : dirs) {
42+
int newX = x + dir[0];
43+
int newY = y + dir[1];
44+
if (newX >= 0 && newX < numRows && newY >= 0 && newY < numCols && !visited[newX][newY]) {
45+
queue.add(new int[]{newX, newY, removed[2] + 1});
46+
visited[newX][newY] = true;
47+
}
48+
}
49+
}
50+
}
51+
}
52+
if (houses == numOfHouses) {
53+
distance[0] = Math.min(distance[0], currDistance);
54+
}
55+
}
56+
}

Medium/Convert Binary Search Tree to Sorted Doubly Linked List.java

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,43 +7,40 @@ class Node {
77
88
public Node() {}
99
10+
public Node(int _val) {
11+
val = _val;
12+
}
13+
1014
public Node(int _val,Node _left,Node _right) {
1115
val = _val;
1216
left = _left;
1317
right = _right;
1418
}
1519
};
1620
*/
21+
1722
class Solution {
18-
Node prev;
19-
public Node treeToDoublyList(Node r) {
20-
if (r == null) {
21-
return r;
22-
}
23-
24-
prev = null;
25-
Node dummy = new Node(0);
26-
prev = dummy;
27-
28-
inorderHelper(r);
29-
30-
prev.right = dummy.right;
31-
dummy.right.left = prev;
32-
33-
return dummy.right;
23+
Node prev;
24+
public Node treeToDoublyList(Node root) {
25+
if (root == null) {
26+
return root;
3427
}
35-
36-
private void inorderHelper(Node root) {
37-
if (root == null) {
38-
return;
39-
}
40-
41-
inorderHelper(root.left);
42-
43-
prev.right = root;
44-
root.left = prev;
45-
prev = root;
46-
47-
inorderHelper(root.right);
28+
Node dummy = new Node(0);
29+
prev = dummy;
30+
helper(root);
31+
prev.right = dummy.right;
32+
dummy.right.left = prev;
33+
return dummy.right;
34+
}
35+
36+
private void helper(Node root) {
37+
if (root == null) {
38+
return;
4839
}
40+
helper(root.left);
41+
prev.right = root;
42+
root.left = prev;
43+
prev = root;
44+
helper(root.right);
45+
}
4946
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public int[][] multiply(int[][] A, int[][] B) {
3+
int m = A.length;
4+
int n = A[0].length;
5+
int nB = B[0].length;
6+
int[][] C = new int[m][nB];
7+
for(int i = 0; i < m; i++) {
8+
for(int k = 0; k < n; k++) {
9+
if (A[i][k] != 0) {
10+
for (int j = 0; j < nB; j++) {
11+
if (B[k][j] != 0) {
12+
C[i][j] += A[i][k] * B[k][j];
13+
}
14+
}
15+
}
16+
}
17+
}
18+
return C;
19+
}
20+
}

0 commit comments

Comments
 (0)