题目描述:给定一个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;
}
};