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
.
Java:
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int row = matrix.length;
if(row==0) return false;
int col = matrix[0].length;
if(col==0) return false;
int i=0;
while(i<row)
{
if(target < matrix[i][0]) break;
i++;
}
if(i==0) return false;
return findtarget(matrix[i-1], target, 0, col-1);
}
public boolean findtarget(int[] array, int target,int left, int right)
{
if(left > right) return false;
int mid = (left+right)/2;
if(array[mid] == target) return true;
if(target < array[mid]) return findtarget(array,target, left, mid -1);
if(target > array[mid]) return findtarget(array,target, mid+1, right);
return false;
}
}