码迷,mamicode.com
首页 > 其他好文 > 详细

lintcode 容易题:Search a 2D Matrix 搜索二维矩阵

时间:2015-10-15 22:03:53      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

题目:

搜索二维矩阵

写出一个高效的算法来搜索 m × n矩阵中的值。

这个矩阵具有以下特性:

  • 每行中的整数从左到右是排序的。
  • 每行的第一个数大于上一行的最后一个整数。
样例

考虑下列矩阵:

[
  [1, 3, 5, 7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]

给出 target = 3,返回 true

挑战

O(log(n) + log(m)) 时间复杂度

解题:

1.最简单的方法就是遍历整个矩阵,时间复杂度:O(log(mn)),这个应该等于O(long(n)+log(m))

2.题目给的矩阵是有序矩阵,先按照最后一列二分查找,确定列,再二分确定行,时间复杂度O(log(m)) + O(log(n)),哦,哦,哦,题目的挑战可能是搞错了。。。

Java程序:

技术分享
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==null)
            return false;
        int m  = matrix.length;
        if(m==0)
            return false;
        int n = matrix[0].length;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++)
                if(matrix[i][j]==target)
                    return true;
        }
        return false;
    }
}
View Code

 总耗时: 1571 ms

Python程序:

技术分享
class Solution:
    """
    @param matrix, a list of lists of integers
    @param target, an integer
    @return a boolean, indicate whether matrix contains target
    """
    def searchMatrix(self, matrix, target):
        # write your code here
        if matrix==None:
            return False
        m = len(matrix)
        if m==0:
            return False
        n = len(matrix[0])
        for i in range(m):
            for j in range(n):
                if matrix[i][j]==target:
                    return True
        return False
View Code

总耗时: 260 ms

利用二分思想程序:

Java程序:

 

Python程序:

 

lintcode 容易题:Search a 2D Matrix 搜索二维矩阵

标签:

原文地址:http://www.cnblogs.com/theskulls/p/4883615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!