題目地址:
https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix/
給定一個二維矩陣,每一行從左到右(非嚴格)單調下降,每一列從上到下(非嚴格)單調下降,求矩陣裏有多少個負數。
從矩陣最右上角開始,先找到第一行的最後一個負數,然後累加第一行的負數個數,然後向下移動一格,由於每一列單調下降,所以一定會走到一個負數,然後向左走走到第二行最後一個負數,累加第二行負數個數。如此這樣,一直走到最後一行爲止。代碼如下:
public class Solution {
public int countNegatives(int[][] grid) {
// 判空
if (grid == null || grid.length == 0 || grid[0].length == 0) {
return 0;
}
int res = 0;
int n = grid.length, m = grid[0].length;
// 從右上角開始出發
int x = 0, y = m - 1;
while (x < n) {
// 找第x行的最後一個負數
while (y >= 0 && grid[x][y] < 0) {
y--;
}
// 本行沒有負數,則讓y = m - 1,否則讓y指向從左到右第一個負數
if (y < m - 1) {
y++;
}
// 如果本行有負數,那麼累加本行負數的個數;
if (grid[x][y] < 0) {
res += m - y;
}
x++;
}
return res;
}
}
時間複雜度,空間。
註解:
也可以用二分法來做,對每一行做二分,時間複雜度是。