题目:searchMatrix
要求:
写出一个高效的算法来搜索 m × n矩阵中的值。
这个矩阵具有以下特性:
- 每行中的整数从左到右是排序的。
- 每行的第一个数大于上一行的最后一个整数。
样例:
考虑下列矩阵:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
给出 target = 3,返回 true
算法要求:
O(log(n) + log(m)) 时间复杂度
解题思路:
直接判断数组末尾的是否大于目标,如果大于,则说明目标数值可能在这一行,或者不存在。
算法如下:
bool searchMatrix(vector<vector<int> > &matrix, int target) {
int size = matrix.size();
for (int i = 0; i < size; i++) {
int size2 = matrix[i].size();
if (target > matrix[i][size2 - 1]) {
continue;
}
for (int j = 0; j < size2; j++) {
if (target == matrix[i][j]) {
return true;
}
}
}
return false;
}