-
Notifications
You must be signed in to change notification settings - Fork 17
/
CountNegativesInSortedMatrix.java
72 lines (66 loc) · 1.98 KB
/
CountNegativesInSortedMatrix.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package by.andd3dfx.search;
/**
* <pre>
* <a href="https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix/description/">Task description</a>
*
* Given a m x n matrix grid which is sorted in non-increasing order both row-wise and column-wise,
* return the number of negative numbers in grid.
*
* Example 1:
* Input: grid = [
* [4,3,2,-1],
* [3,2,1,-1],
* [1,1,-1,-2],
* [-1,-1,-2,-3]
* ]
* Output: 8
* Explanation: There are 8 negatives number in the matrix.
*
* Example 2:
* Input: grid = [[3,2],[1,0]]
* Output: 0
*
* Follow up: Could you find an O(n + m) solution?
* </pre>
*
* @see <a href="https://youtu.be/N3RrlPQn9CY">Video solution</a>
*/
public class CountNegativesInSortedMatrix {
public static int count_MN(int[][] grid) {
var m = grid.length;
if (m == 0) {
return 0;
}
var n = grid[0].length;
var result = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] < 0) {
result += n - j; // add count of numbers from current to the end of row (because of sorted row)
break;
}
}
}
return result;
}
public static int count_NPlusM(int[][] grid) {
var m = grid.length;
if (m == 0) {
return 0;
}
var n = grid[0].length;
var result = 0;
// start position in the left bottom grid corner
var i = m - 1;
var j = 0;
while (i >= 0 && j < n) {
if (grid[i][j] < 0) {
i--; // switch to the upper row
result += n - j; // add count of numbers from current to the end of row (because of sorted row)
} else {
j++; // switch to the right column
}
}
return result;
}
}