编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
示例:
现有矩阵 matrix 如下:
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ]
给定 target = 5
,返回 true
。
给定 target = 20
,返回 false
。
///
思路: 先判断target处于哪一行,然后从这些可能的行开始遍历
/
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty()) return false ;
int i = 0 ;
while(i<matrix.size())
{
// 如果target比某一行的第一个元素大 比最后一个元素小 则target有可能处于这一行
if(!matrix[i].empty()&&target>=matrix[i][0]&&target<=matrix[i][(matrix[i].size()-1)] ) break ;
i++ ;
}
if(i == matrix.size() ) return false ;
while(i<matrix.size() && target>=matrix[i][0] )
{ // 这里写的有点累赘 可以直接放到上面的循环里去
for(int j = 0 ;j <matrix[i].size() ;j++)
{
if(matrix[i][j] == target) return true ;
}
i++ ;
}
return false ;
//
这部分是我直接遍历所有元素 发现也能通过
//
#if 0
for(int i = 0 ;i<matrix.size();i++)
{
for(int j =0;j<matrix[i].size();j++)
{
if(matrix[i][j] == target )
return true ;
}
}
return false ;
#endif
}
};