# leetcode #74 in cpp

Solution:

We could perform 2 binary searches. The first search is to locate the specific row which potentially contains the target. Once we find the row, we perform binary search in the row to find the target.

Code:

class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
if(target < matrix[0][0] || target > matrix[m-1][n-1]) return false;

<span style="white-space:pre">	</span>int lower_row = 0;
int upper_row = m-1;
int mid_row;
//search for the specific row. The row we are looking for has a range that the target could fall in.
//That is, the target should be larger than the first number and smaller than the last number in the row.
while(lower_row <= upper_row){
mid_row = (lower_row + upper_row) / 2;
if(matrix[mid_row][0] <= target && matrix[mid_row][n-1] >= target){
break;
}
if(matrix[mid_row][n-1] < target ){
lower_row = mid_row + 1;
}
else{
upper_row = mid_row - 1;
}
}
if(lower_row > upper_row) return false;//if lower_row > upper_row, this means the specific row is not found, and thus there are no rows with range the target could fall in. We can termiante now.

int lower_col = 0;
int upper_col = n - 1;
int mid_col;
//binary search through the columns in the row
while(lower_col <= upper_col){
mid_col = (lower_col + upper_col) /2;
if(matrix[mid_row][mid_col] == target) return true;
if(matrix[mid_row][mid_col] < target){
lower_col = mid_col + 1;
}else{
upper_col = mid_col - 1;
}
}
return false;
}
};

• 本文已收录于以下专栏：

举报原因： 您举报文章：leetcode #74 in cpp 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)