Search a 2D Matrix
Write an efficient algorithm, searches for a value in a m x n Matrix. This matrix has the following properties:
- Integers in each row is sorted from the left to the right.
- The first integer of each row was greater than the last integer of the previous row.
For example,
Consider the following matrix:
[ [1, 3, 5, 7], [Ten, One,], [23, 30, 34, 50]]
Given target = 3
, return true
.
Two-point lookup, Time complexity O (LOGM) +o (LOGN).
1 classSolution {2 Public:3 BOOLSearchmatrix (vector<vector<int>>& Matrix,inttarget) {4 if(matrix.size () = =0|| matrix[0].size () = =0)return false;5 intM=matrix.size (), n=matrix[0].size ();6 intleft=0, right=m-1;7 while(left<=Right )8 {9 intMid = (left+right)/2;Ten if(matrix[mid][0]==target)return true; One Else if(matrix[mid][0]<target) A { -left = mid+1; - } the Else - { -right = mid-1; - } + } - intpos =Right ; + if(pos<0)return false; Aleft=0; atright = N1; - while(left<=Right ) - { - intMid = (left+right)/2; - if(Matrix[pos][mid]==target)return true; - Else if(matrix[pos][mid]<target) in { -left = mid+1; to } + Else - { theright = mid-1; * } $ }Panax Notoginseng return false; - } the};
The problem can also be traversed from the upper right corner, with time complexity O (m) +o (n).
1 classSolution {2 Public:3 BOOLSearchmatrix (vector<vector<int>>& Matrix,inttarget) {4 if(matrix.size () = =0|| matrix[0].size () = =0)return false;5 intM=matrix.size (), n=matrix[0].size ();6 introw=0, col=n-1;7 while(Row<m && col>=0)8 {9 if(Matrix[row][col]==target)return true;Ten Else if(Matrix[row][col]<target) row++; One Elsecol--; A } - return false; - } the};
[Leetcode] Search a 2D Matrix