原题地址:【04】二维数组中的查找
提交代码:
class Solution {
/*
*考察二分,可以以右上角为二分的中点,进行二分查找。
*时间复杂度:n+m
*/
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
//检查二维和一维数组是否为空
if(matrix.empty() || matrix[0].empty()) return false;
//右上角点为二分查找的中点,设置其初始位置,最后不断接近重点。
int midy = matrix[0].size()-1, midx = 0;
//设置循环条件,midy必须大于0,mid不能越界。
while(midy >= 0 && midx <= matrix.size()-1){
//当中间节点等于目标值时,返回true.
if(matrix[midx][midy] == target){
return true;
//当中间节点的值大于目标值时,中间节点的midy坐标左移一下。
}else if(matrix[midx][midy]>target){
midy--;
//当目标节点的值小于目标值时,中间节点向下移动一步。
}else{
midx++;;
}
}
//最后如果没有搜索到结果,则返回
return false;
}
};
画个图好理解: