LeetCode OJ 之 Search a 2D Matrix (二维矩阵的搜索)

来源:互联网 发布:卖家网wish数据 编辑:程序博客网 时间:2024/06/08 08:43

题目:

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.

写一个高效的算法在m x n 维矩阵中查找一个值,这个矩阵有以下特性:

矩阵的每一行的数是有序的。

每一行的第一个数比上一行的最后一个大。

For example,

Consider the following matrix:

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

Given target = 3, return true.

思路:

二分查找。

代码1:

class Solution {public:    bool searchMatrix(vector<vector<int> > &matrix, int target)    {        int row = matrix.size();        if(row == 0)            return false;        int col = matrix[0].size();        for(int i = 0 ; i < row ; i++)        {            if(matrix[i][0] > target || matrix[i][col-1] < target)                continue;            int begin = 0 , end = col-1;            while(begin <= end)            {                int mid = (begin + end)/2;                if(matrix[i][mid] == target)                    return true;                if(matrix[i][mid] > target )                    end = mid - 1;                else                    begin = mid + 1;            }        }        return false;    }};

代码2:

class Solution {public:    bool searchMatrix(vector<vector<int> > &matrix, int target)    {        int row = matrix.size();        if(row == 0)            return false;        int col = matrix[0].size();        int begin = 0 ;        int end = row * col - 1;        while(begin <= end)        {            int mid = (begin + end)/2;            if(target == matrix[mid/col][mid%col])                return true;            if(target < matrix[mid/col][mid%col])                end = mid - 1;            else                begin = mid + 1;        }        return false;    }};


0 0