> For the complete documentation index, see [llms.txt](https://coding-9.gitbook.io/untitled/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coding-9.gitbook.io/untitled/binary-search/bs-on-2d-arrays/240.-search-a-2d-matrix-ii.md).

# 240. Search a 2D Matrix II

## Problem Statement

<br>

Write an efficient algorithm that searches for a value `target` in an `m x n` integer matrix `matrix`. This matrix has the following properties:

* Integers in each row are sorted in ascending from left to right.
* Integers in each column are sorted in ascending from top to bottom.

&#x20;

**Example 1:**

![](https://assets.leetcode.com/uploads/2020/11/24/searchgrid2.jpg)

<pre><code><strong>Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
</strong><strong>Output: true
</strong></code></pre>

**Example 2:**

![](https://assets.leetcode.com/uploads/2020/11/24/searchgrid.jpg)

<pre><code><strong>Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
</strong><strong>Output: false
</strong></code></pre>

&#x20;

**Constraints:**

* `m == matrix.length`
* `n == matrix[i].length`
* `1 <= n, m <= 300`
* `-109 <= matrix[i][j] <= 109`
* All the integers in each row are **sorted** in ascending order.
* All the integers in each column are **sorted** in ascending order.
* `-109 <= target <= 109`

## Intuition

```
```

### Links

<https://leetcode.com/problems/search-a-2d-matrix-ii/description/>

### Video Links

### Approach 1:

```
MlogN time , 1 Space
Binary Search on all rows
```

{% code title="C++" lineNumbers="true" %}

```cpp
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& arr, int target) {
        
        for(auto &it: arr){
            int low=0, high=arr[0].size()-1;
            while(low<=high){
                int mid = low+(high-low)/2;
                if(it[mid] == target)
                    return true;
                else if(it[mid] > target)
                    high = mid-1;
                else
                    low = mid+1;
            }
        }

        return false;
    }
};
```

{% endcode %}

### Approach 2:

```
m+n time 
Start from the edge 0,0 row 
This will clearly state you whether to go bottom or left

Do this until you reach target        
```

{% code title="C++" lineNumbers="true" %}

```cpp
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& arr, int target) {
        int i=0, j=arr[0].size()-1;
        while(i<arr.size() and j>=0){
            if(arr[i][j] == target)
                return true;
            else if(arr[i][j] > target)
                j--;
            else
                i++;
        }

        return false;
    }
};
```

{% endcode %}

### Approach 3:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 4:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Similar Problems

###
