[LeetCode]Search a 2D Matrix

来源:互联网 发布:win10新系统优化 编辑:程序博客网 时间:2024/06/08 15:02

题目描述:给定一个m*n的矩阵,矩阵每一行的元素依次增大,矩阵前一行的最后一个元素一定小于矩阵下一行的第一个元素(两个条件综合起来就是说,这个矩阵排成一列数是递增的),要求写出一个快速的算法判断一个特定的值target是否在这个矩阵中。

解题思路:二分查找。

解题注意点:

1、mid对应的元素映射到矩阵里面是matrix[mid/n][mid%n];

2、注意二分查找退出的条件是begin<end; 初始化时begin=0;end=m*n;

3、STL的一些用法Mark一下:  vector<vector<int> > matrix;

        matrix.empty();

const size_t m=matrix.size();

const size_t n=matrix.front().size();


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




0 0