Search a 2D Matrix

Tags : array, matrix, binary-search, leetcode, cpp, medium

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

Examples #

Example 1:

Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
Output: true

Example 2:

Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
Output: false

Constraints #

Solutions #


class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
      
      int rows = matrix.size();
      int cols = matrix[0].size();
      int l = 0;
      int r = rows*cols - 1;
      
      while(l<=r){
        
        int mid = (l+r)>>1;
        int midr = mid/cols;
        int midc = mid%cols;
        
        if(matrix[midr][midc]==target) return true;
        else if(matrix[midr][midc]>target) r=mid-1;
        else l=mid+1;
        
      }
      
      return false;
    }
};