[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;
    }
}

 

posted on 2015-12-04 05:35  一心一念  阅读(137)  评论(0编辑  收藏  举报

导航