这道题的最简单的算法如下,时间复杂度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;
    }

 

posted on 2022-01-20 04:23  阳光明媚的菲越  阅读(40)  评论(0编辑  收藏  举报