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
.
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
Example 3:
Input: grid = [[1,-1],[-1,-1]] Output: 3
Example 4:
Input: grid = [[-1]] Output: 1
Constraints:
m == grid.length
n == grid[i].length
1 <= m, n <= 100
-100 <= grid[i][j] <= 100
class Solution { public int countNegatives(int[][] grid) { int res = 0; for(int i = 0; i < grid.length; i++){ for(int j = 0; j < grid[0].length; j++){ if(grid[i][j] < 0) res++; } } return res; } }
我没看错吧?brute force还66.9%
class Solution { public int countNegatives(int[][] grid) { int res = 0; int m = grid.length; int n = grid[0].length; int i = 0; int j = n - 1; while(i < m && j >= 0){ if(grid[i][j] < 0){ res += m - i; j--; } else i++; } return res; } }
O(M + N),从右上角开始扫到左下角