【Leetcode】1351. Count Negative Numbers in a Sorted Matrix

題目地址:

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

時間複雜度O(n+m)O(n+m),空間O(1)O(1)

註解:
也可以用二分法來做,對每一行做二分,時間複雜度是O(nlogm)O(n\log m)

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