题目来源
题目描述
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
}
};
题目解析
将二维数组转换为一维矩阵(最优解)
这样,现在的问题就变成了:在一个排好序的数组中查找目标值是否存在。
这样,就可以用二分法来查找了
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty()){
return false;
}
int m = matrix.size(), n = matrix[0].size();
int left = 0, right = m * n - 1;
while (left <= right) {
// mid 是一维数组的索引
int mid = left + (right - left) / 2;
// mid / n 是将一维数组的索引转成二维数组的行坐标
// mid % n 是将一维数组的索引转成二维数组的列坐标
int midNum = matrix[mid / n][mid % n];
if (midNum == target) {
return true;
} else if (midNum < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return false;
}
};
- 时间复杂度是 O(log(n * m) )
- 空间复杂度O(1)
类似题目
题目 | 思路 |
---|---|
leetcode:74. 搜索二维矩阵 Search a 2D Matrix | 二维转一维 |
leetcode:240. 搜索二维矩阵 IISearch a 2D Matrix | 二分 |