题目:《程序员面试金典(第5版)》P260
给定M*N矩阵,每一行、每一列都按升序排列,判断是否存在某个元素。
提示:可以从矩阵的右上角开始找,也可以从左下角开始找。用二分查找的方法过于复杂,不推荐。
方法一:从矩阵的右上角开始找
bool HasElement(vector<vector<int>> martix,int elem)
{
if(martix.empty() || martix[0].empty())
return false;
int row=0,col=martix[0].size()-1;//右上角元素
while(row<martix.size() && col>=0)
{
if(martix[row][col]==elem)
return true;
else if(martix[row][col]>elem)
col--;
else
row++;
}
return false;
}
方法二:从矩阵的左下角开始找
bool HasElement(vector<vector<int>> martix,int elem)
{
if(martix.empty() || martix[0].empty())
return false;
int row=martix.size()-1,col=0;//左下角元素
while(row>=0 && col<martix[0].size())
{
if(martix[row][col]==elem)
return true;
else if(martix[row][col]<elem)
col++;
else
row--;
}
return false;
}