LeetCode之1351. 统计有序矩阵中的负数

概要

题目来源链接:https://leetcode-cn.com/problems/count-negative-numbers-in-a-sorted-matrix/

难度:简单

类型:数组

题目

给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 

请你统计并返回 grid 中 负数 的数目。

示例

示例 1:

输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]
输出:8
解释:矩阵中共有 8 个负数。
示例 2:

输入:grid = [[3,2],[1,0]]
输出:0
示例 3:

输入:grid = [[1,-1],[-1,-1]]
输出:3
示例 4:

输入:grid = [[-1]]
输出:1
 

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 100
-100 <= grid[i][j] <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-negative-numbers-in-a-sorted-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

第一种算法是暴力破解,即循环遍历二维数组依次判断二维数组中的每个数是否是负数,如果是则计数器加1。

第二种算法遍历二维数组中的每一行,如果遇到的第一个数是负数,那么由于是非递增排列的,所以后面的数一定是负数,所以不必再比较后面的数。如grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]],其中第一行-1是负数,count=1;第二行-1是负数,count=1+1=2;第三行第一个负数是-1,而-1后面的数必然是负数,如例后面的-2也是负数,所以count=1+1+2=4;第四行第一个负数是-1,那么-1后面一定是负数,所以count=1+1+2+4=8。

代码

Java代码

第一种算法:

    /**
     * 统计有序矩阵中的负数
     * @param grid 有序矩阵
     * @return 返回有序矩阵中负数的个数
     */
    public int countNegatives(int[][] grid) {
        int count=0;// 计数器,统计负数的个数
        for (int[] ints : grid) {// 双层循环遍历二维数组中的数
            for (int anInt : ints) {
                if(anInt<0){// 如果是负数则计数器加1
                    count++;
                }
            }
        }
        return count;
    }

第二种算法:

    /**
     * 统计有序矩阵中的负数(第二种算法)
     *
     * @param grid 有序矩阵
     * @return 返回有序矩阵中负数的个数
     */
    public int countNegatives(int[][] grid) {
        int count = 0;// 计数器,统计负数的个数
        for (int i = 0; i < grid.length; i++) {// 循环二维数组的行数
            int j = 0;// 计数器,记录二维数组中的列数
            while (i < grid.length && j < grid[i].length) {
                if (grid[i][j] < 0) {// 判断二维数组中的数是否是负数,如果是由于是递减排列的,所以后面的数一定是负数
                    count += grid[i].length - j;// 直接相加即可,不必再遍历后面的数
                    break;
                }
                j++;
            }
        }
        return count;
    }

 

你可能感兴趣的:(#,LeetCode,leetcode,数据结构,java)