---
# System prepended metadata

title: 1351. Count Negative Numbers in a Sorted Matrix
tags: [Leetcode, python, array, c++, easy]

---

###### tags: `Leetcode` `easy` `array` `python` `c++`

# 1351. Count Negative Numbers in a Sorted Matrix

## [題目連結:] https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix/description/

## 題目:
Given a ```m x n``` matrix grid which is sorted in non-increasing order both row-wise and column-wise, return the number of **negative** numbers in ```grid```.

**Follow up:** Could you find an ```O(n + m)``` solution?

**Example 1:**
```
Input: grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]
Output: 8
Explanation: There are 8 negatives number in the matrix.
```
**Example 2:**
```
Input: grid = [[3,2],[1,0]]
Output: 0
```

## 解題想法:
* 此題為求出matrix中所有小於0的元素各數
	* 此matrix每列、行皆為由大到小排好
	* time: O(m+n)

* 此題說歸類在binary search@@? 但是感覺不相關

* 作法:
	* 從**左下角**開始遍歷判斷
		* curRow=m-1
		* curCol=0
	* 對於每個位置，判斷當前是否<0
		* 若<0，則該行(n-curCol)數量皆可加入到res
			* 並往上一列移動 
			* curRow-=1
		* 若>0，則往該行後面移動
			* curCol+=1

## Python:
``` python=
class Solution(object):
    def countNegatives(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        #從左下開始遍歷判斷
        #對於每列由左至右判斷是否小於0
        m=len(grid)
        n=len(grid[0])
        res=0
        curRow=m-1
        curCol=0
        while curRow>=0 and curCol<n:
            if grid[curRow][curCol]<0:
                res+= n-curCol
                curRow-=1
            else:
                curCol+=1
        return res
```

## C++:
``` cpp=
class Solution {
public:
    int countNegatives(vector<vector<int>>& grid) {
        int m=grid.size(), n=grid[0].size();
        int curRow=m-1, curCol=0;
        int res=0;
        while (curRow>=0 && curCol<n){
            if (grid[curRow][curCol]<0){
                res+= n-curCol;
                curRow-=1;
            }
            else
                curCol+=1;
        }
        return res;
    }
};
```