---
# System prepended metadata

title: 1351. Count Negative Numbers in a Sorted Matrix

---


# 1351. Count Negative Numbers in a Sorted Matrix
[1351. Count Negative Numbers in a Sorted Matrix](https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix/) (<font color="#00AF9B"> Easy</font> 通過率: 77.7%)



## 限制條件
<ul>
<li>m == grid.length</li>
<li>n == grid[i].length</li>
<li>1 <= m, n <= 100</li>
<li>-100 <= grid[i][j] <= 100</li>
</ul>




### 解法 1
第一種寫法，很簡單的暴力解。
會過，但這種寫法很丑。

- 時間複雜度: O(n*m)
- 空間複雜度: O(1)

```cpp!=
class Solution {
public:
    int countNegatives(vector<vector<int>>& grid) {
        int result = 0;
        for (int i = 0; i < grid.size(); i++) {
            for (int j = 0; j < grid[i].size(); j++) {
                if(grid[i][j]<0) {
                    result+= (grid[i].size() - j);
                    break;
                }
            }
        }
        return result;
    }
};
```



### 解法 2
第二種類就是類似游標的感覺。
先從第最後一列的第一個元素開始找
1. 如果找到負數，那就不用看後面直接＋當列的負數個數，然後往上一列繼續找。
2. 如果找到的是正數，那繼續往右找到負數為止。

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

```cpp!=
class Solution {
public:
    int countNegatives(vector<vector<int>>& grid) {
        int result = 0;

        int m = grid.size();
        int n = grid[0].size();

        int xIndex = m - 1;
        int yIndex = 0;

        while (xIndex >= 0 && xIndex < m && yIndex >= 0 && yIndex < n) {
            if (grid[xIndex][yIndex] < 0) {
                result += (n - yIndex);
                xIndex -= 1;
            } else {
                yIndex += 1;
            }
        }

        return result;
    }
};
```
