Given a m * n
matrix grid
which is sorted in non-increasing order both row-wise and column-wise.
Return the number of negative numbers in grid
.
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.
Input: grid = [[3,2],[1,0]] Output: 0
Input: grid = [[1,-1],[-1,-1]] Output: 3
Input: grid = [[-1]] Output: 1
m == grid.length
n == grid[i].length
1 <= m, n <= 100
-100 <= grid[i][j] <= 100
impl Solution {
pub fn count_negatives(grid: Vec<Vec<i32>>) -> i32 {
let m = grid.len();
let n = grid[0].len();
let mut pos = 0;
for row in grid {
match row.binary_search_by(|probe| 0.cmp(&probe)) {
Ok(i) => pos += i + 1,
Err(i) => pos += i,
}
}
(m * n - pos) as i32
}
}