Skip to content

Commit fcd2d1f

Browse files
solves special position in inary matrix
1 parent 06c20b1 commit fcd2d1f

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -395,3 +395,4 @@
395395
| 1566 | [Detect Pattern of Length M Repeated K or More Times](https://leetcode.com/problems/detect-pattern-of-length-m-repeated-k-or-more-times) | [![Java](assets/java.png)](src/DetectPatternOfLengthMRepeatedKOrMoreTimes.java) | |
396396
| 1572 | [Matrix Diagonal Sum](https://leetcode.com/problems/matrix-diagonal-sum) | [![Java](assets/java.png)](src/MatrixDiagonalSum.java) | |
397397
| 1576 | [Replace All ?'s to Avoid Consecutive Repeating Characters](https://leetcode.com/problems/replace-all-s-to-avoid-consecutive-repeating-characters) | [![Java](assets/java.png)](src/ReplaceAllToAvoidConsecutiveRepeatingCharacters.java) | |
398+
| 1582 | [Special Positions in a Binary Matrix](https://leetcode.com/problems/special-positions-in-a-binary-matrix) | [![Java](assets/java.png)](src/SpecialPositionInABinaryMatrix.java) | |
+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// https://leetcode.com/problems/special-positions-in-a-binary-matrix
2+
// T: O(n * m)
3+
// S: O(n + m)
4+
5+
import java.util.Arrays;
6+
7+
public class SpecialPositionInABinaryMatrix {
8+
public int numSpecial(int[][] matrix) {
9+
final int[] rowSum = getRowSum(matrix);
10+
final ColumnSumData columnSumData = getColumnSum(matrix);
11+
final int[] columnSumOneRowIndex = columnSumData.oneIndex;
12+
final int[] columnSum = columnSumData.sum;
13+
int specialPositions = 0;
14+
for (int i = 0 ; i < columnSum.length ; i++) {
15+
if (columnSum[i] == 1 && rowSum[columnSumOneRowIndex[i]] == 1) {
16+
specialPositions++;
17+
}
18+
}
19+
return specialPositions;
20+
}
21+
22+
private int[] getRowSum(int[][] matrix) {
23+
final int[] sum = new int[matrix.length];
24+
for (int i = 0 ; i < sum.length ; i++) {
25+
sum[i] = Arrays.stream(matrix[i]).sum();
26+
}
27+
return sum;
28+
}
29+
30+
private ColumnSumData getColumnSum(int[][] matrix) {
31+
final int[] sum = new int[matrix[0].length];
32+
final int[] indexes = new int[sum.length];
33+
for (int i = 0 ; i < sum.length ; i++) {
34+
for (int row = 0 , index = 0 ; row < matrix.length ; row++) {
35+
sum[i] += matrix[row][i];
36+
if (matrix[row][i] == 1) indexes[i] = row;
37+
}
38+
}
39+
return new ColumnSumData(sum, indexes);
40+
}
41+
42+
private static final class ColumnSumData {
43+
private final int[] sum;
44+
private final int[] oneIndex;
45+
46+
private ColumnSumData(int[] sum, int[] oneIndex) {
47+
this.sum = sum;
48+
this.oneIndex = oneIndex;
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)