python:
class Solution:
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if len(matrix) == 0 or len(matrix[0]) == 0:
return False
def find(row, target):
mid = len(row) // 2
sta = 0
end = len(row) - 1
while( sta <= end):
if target < row[mid]:
end = mid - 1
mid = (sta + end)//2
elif target > row[mid]:
sta = mid + 1
mid = (sta + end)//2
else:
return True
return False
l = len(matrix)
for i in range(l):
if target <= matrix[i][-1]:
return find(matrix[i], target)
return False
c++:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if (matrix.size() == 0 || matrix[0].size() == 0) {
return false;
}
int start = 0;
int end = matrix.size() - 1;
int row;
while(start <= end){
int mid = start + (end - start)/2;
if (target > matrix[mid][matrix[0].size()-1])
start = mid + 1;
else if (target < matrix[mid][0])
end = mid - 1;
else {
row = mid;
break;
}
}
int left = 0;
int right = matrix[0].size() - 1;
while(left <= right){
int mid = left + (right - left)/2;
if(target < matrix[row][mid])
right = mid - 1;
else if (target > matrix[row][mid])
left = mid + 1;
else
return true;
}
return false;
}
};