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.
public class Solution { public boolean searchMatrix(int[][] matrix, int target) { boolean found=false; if(matrix==null){ return found; } int m=matrix.length; int n=matrix[0].length; int upRow=0; int downRow=m-1; while(upRow<=downRow){ if(target<=matrix[upRow][n-1]){ found=binarySearch(matrix, upRow, target); break; } else if(target>=matrix[downRow][0]){ found=binarySearch(matrix, downRow, target); break; } else{ upRow++; downRow--; } } return found; } public boolean binarySearch(int[][]matrix, int row, int target){ int m=matrix.length; int n=matrix[0].length; int left=0; int right=n-1; boolean found=false; while(left<=right){ int mid=left+(right-left)/2; if(matrix[row][mid]==target){ found=true; break; } else if(matrix[row][mid]