[lintcode easy]Search a 2D Matrix
Search a 2D Matrix
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.
Example
Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target = 3
, return true
.
Challenge
O(log(n) + log(m)) time
////
先按列查找出target所在的位置
再按行查找出target的位置。
public class Solution { /** * @param matrix, a list of lists of integers * @param target, an integer * @return a boolean, indicate whether matrix contains target */ public boolean searchMatrix(int[][] matrix, int target) { // write your code here if(matrix.length==0 || matrix[0].length==0) return false; if(target <matrix[0][0] || target>matrix[matrix.length-1][matrix[0].length-1]) return false; int m=matrix.length; int n=matrix[0].length; int rowNum=searchAimRow(matrix,target,m,n); for(int i=0;i<n;i++) { if(target==matrix[rowNum][i]) { return true; } } return false; } public int searchAimRow(int[][] matrix,int target, int m, int n) { int i=0; for(i=0;i<m;i++) { if(target<=matrix[i][n-1]) { break; } } return i; } }