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
.
Solution 1:
Using the classic dichotomy template
1 while(Left <=Right ) {2 intMid = left + (right-left)/2;3 4 5 intn =Matrix[row][col];6 7 if(n = =target) {8 ...9}Else if(N <target) {Tenleft = mid + 1; One}Else { Aright = Mid-1; - } -}
1 Public classSolution {2 Public BooleanSearchmatrix (int[] Matrix,inttarget) {3 if(Matrix = =NULL|| Matrix.length = = 0 | | Matrix[0].length = = 0) {4 return false;5 }6 7 introws =matrix.length;8 intcols = matrix[0].length;9 Ten intnum = rows *cols; One A intleft = 0; - intright = Num-1; - the while(Left <=Right ) { - intMid = left + (right-left)/2; - - intRow = mid/cols; + intCol = mid%cols; - + intn =Matrix[row][col]; A at if(n = =target) { - return true; -}Else if(N <target) { -left = mid + 1; -}Else { -right = Mid-1; in } - } to + return false; - } the}
View CodeGITHUB:
Https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/divide2/SearchMatrix.java
Leetcode:search a 2D Matrix problem solving report