Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
- Integers in each row are sorted from left to right.
- The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
Given target = 3
, return true
.
bool searchMatrix(int** matrix, int matrixRowSize, int matrixColSize, int target) {
if (target > matrix[matrixRowSize - 1][matrixColSize - 1] || target < matrix[0][0])
return false;
int lowr = 0, highr = matrixRowSize - 1;
if(matrix[lowr][0]==target)
return true;
if (matrix[highr][0] == target)
return true;
if (matrix[highr][0] < target)
lowr = highr;
else
while (highr - lowr > 0)
{
if (matrix[highr][0] > target)
highr = (lowr + highr) / 2;
else
{
highr = 2 * highr - lowr;
highr=highr >= matrixRowSize ? matrixRowSize - 1 : highr;
lowr = (highr + lowr) / 2;
}
}
if(matrix[lowr][0]==target)
return true;
int lowc = 0, highc = matrixColSize - 1;
while (highc > lowc)
{
if (matrix[lowr][highc] == target)
return true;
if (matrix[lowr][highc] > target)
highc = (lowc + highc) / 2;
else
{
highc = 2 * highc - lowc;
lowc = (highc + lowc) / 2;
}
}
return false;
}
accepted