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 .
The main topic: to a m*n matrix, each row is ascending and orderly, progressive is also incremental, requires the design of an efficient algorithm to check whether the target element exists in this matrix.
Problem-solving ideas: The entire matrix can be expanded, is a long array, the length of the array is m*n, with two points to find, it is necessary to find the location of the two sub-matrix subscript. Suppose there is a row row, col column, then the element in the matrix corresponding to the key should be matrix[key/col][key%col], and then the binary search.
Talk is cheap>>
Public BooleanSearchmatrix (int[] Matrix,inttarget) { if(Matrix = =NULL|| Matrix[0][0] >target)return false; intRowlen =matrix.length; intCollen = matrix[0].length; intLow = 0, high = Rowlen * colLen-1; while(Low <=High ) { intMid = (low + high) >>> 1; intx = mid/Collen; inty = mid%Collen; if(Matrix[x][y] >target) { High= Mid-1; } Else if(Matrix[x][y] <target) { Low= Mid + 1; } Else { return true; } } return false; }
Search a 2D matrix--leetcode