首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >搜索二维矩阵Ⅰ

搜索二维矩阵Ⅰ

作者头像
一份执着✘
发布2018-06-04 16:15:48
发布2018-06-04 16:15:48
7320
举报
文章被收录于专栏:赵俊的Java专栏赵俊的Java专栏

题意

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

这个矩阵具有以下特性:

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

样例

考虑下列矩阵:

代码语言:javascript
复制
[

    [1, 3, 5, 7],

    [10, 11, 16, 20],

    [23, 30, 34, 50]

]

给出 target = 3,返回 true

思路

可以先对每一行的第一列进行纵向二分查找,确定目标数大概在哪一行,然后再对那一行进行二分查找。

代码

代码语言:javascript
复制
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) {
        if (matrix == null || matrix.length == 0)
            return false;
        int high = matrix.length - 1;
        int low = 0;
        int mid = 0;
        while (low <= high) {
            mid = (low + high) / 2;
            if (matrix[mid][0] == target)
                return true;
            else if (matrix[mid][0] > target)
                high = mid - 1;
            else
                low = mid + 1;
        }
        int row = mid;
        if (matrix[mid][0] > target) {
            if (mid > 0)
                row = mid - 1;
            else
                return false;
        }
        low = 1;
        high = matrix[0].length - 1;
        while (low <= high) {
            mid = (low + high) / 2;
            if (matrix[row][mid] == target)
                return true;
            else if (matrix[row][mid] > target)
                high = mid - 1;
            else
                low = mid + 1;
        }
        return false;
    }
}

原题地址

LintCode:搜索二维矩阵Ⅰ

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-122,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 样例
  • 思路
  • 代码
  • 原题地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档