Write an efficient algorithm that searches for a value inan m x n matrix.This matrix has the following properties:
- Integers in each row are sortedfrom left to right.
- The first integer of each rowis 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
.
public class Solution {
public booleansearchMatrix(int[][] matrix, int target) {
// Note: The Solution object is instantiatedonly once and is reused by each test case.
return search(matrix, 0, matrix.length-1, 0,matrix[0].length-1, target);
}
boolean search (int[][]matrix, int startRow, int endRow, int startCol, int endCol, inttarget) {
if (endRow < startRow || endCol <startCol) {
returnfalse;
}
int mRow = startRow + (endRow-startRow)/2;
int mCol = startCol + (endCol-startCol)/2;
int val = matrix[mRow][mCol];
if (val == target) {
returntrue;
} else if (val > target) {
returnsearch(matrix, startRow, endRow, startCol, mCol-1, target) //left
|| search(matrix, startRow,mRow-1, mCol, endCol, target); // up
} else {
returnsearch(matrix, startRow, endRow, mCol+1, endCol, target) //right
||search(matrix, mRow+1, endRow, startCol, mCol, target); //below
}
}
}