https://oj.leetcode.com/problems/search-a-2d-matrix/
1、题目要求:在一个m×n的矩阵matrix里面查找目标值target,如果查找成功返回true,否则返回false。
矩阵matrix的具有以下性质:
1)矩阵每行的元素从左到右递增排序;
2)每行的第一个元素比上一行的最后一个元素大;
例: 假设个定矩阵如下,给定目标值target= 3, 则返回true.
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
2、解题思路:用每行的第一个元素进行二分查找,确定target所在行,然后在所在行进行二分查找;
class Solution {
public:
bool searchMatrix(vector<vector<int> > &matrix, int target) {
int n= matrix.size();
int left= 0, right= n-1, mid;
//首先找到target所在的行
while(left<=right)
{
mid= (left+right)/2;
if(target>matrix[mid][0])
left= mid+1;
else if(target<matrix[mid][0])
right= mid-1;
else
return true;
}
//如果target比最小值还小,说明查找失败
if (left == 0)
return false;
//此时left保持的就是target插入的位置(行标号),所以我们应该在left的上一行中查找target
int row= left-1;
left= 0, right= matrix[row].size()-1;
while(left<=right)
{
mid= (left+right)/2;
if(target>matrix[row][mid])
left= mid+1;
else if(target<matrix[row][mid])
right= mid-1;
else
return true;
}
return false;
}
};