这道题的最简单的算法如下,时间复杂度O(m*n)
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; }
因为这个二维数组是排序的,所以可以利用这一点,从下往上一行一行扫描,或者从右往左一列一列扫描,时间复杂度是O(m+n).
public int countNegatives(int[][] grid) { int res =0; int m = grid.length,n = grid[0].length; int i=m-1, j=0; while(i>=0 && j<n){ if(grid[i][j]<0){ res += n-j; i--; }else{ j++; } } return res; }