概要
題目來源鏈接: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;
}