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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章