前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode: Search a 2D Matrix

Leetcode: Search a 2D Matrix

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-22 15:12:14
2660
发布2019-01-22 15:12:14
举报

题目: Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

代码语言:javascript
复制
    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.

For example,

Consider the following matrix:

代码语言:javascript
复制
[
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]

Given target = 3, return true.

思路分析: 这道题不难!我的做法是这样的:首先遍历矩阵的第一列确定给定数字可能存在哪一行,然后利用二分法在该行进行搜索。

C++参考代码:

代码语言:javascript
复制
class Solution
{
public:
    bool searchMatrix(vector<vector<int> > &matrix, int target)
    {
        int rows = int(matrix.size());
        int row = 0;
        bool flag = false;//标志是否有某一行的第一个数字比给定的数字大
        for (int i = 0; i < rows; ++i)
        {
            if (matrix[i][0] == target) return true;
            if (matrix[i][0] > target)
            {
                row = i;
                flag = true;
                break;
            }
        }
        //这里是对特殊情况的处理:如果每一行的第一个数字都比给定数字小,那么说明给定数字有可能在最后一行
        //如果falg=true而且row=1,说明第一行的第一个数字比给定数字大,那么矩阵中肯定不存在给定数字,直接返回false
        if (flag && row == 0) return false;
        else if (!flag) row = rows;
        //下面是对矩阵第row - 1行进行二分查找的过程
        int left = 0;
        int right = int(matrix[row - 1].size()) - 1;
        int middle = right / 2;
        while (left <= right)
        {
            middle = (left + right) / 2;
            if (matrix[row - 1][middle] > target) right = middle - 1;
            else if (matrix[row - 1][middle] < target) left = middle + 1;
            else return true;
        }
        return false;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年04月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档