初始化左右指针 left 和 right,分别指向一维数组的起始位置和结束位置。在 while 循环中,计算中间位置 mid,并通过 mid 计算出其在矩阵中的行 row 和列 col。
如果中间位置的元素等于目标值 target,则返回 true。
如果中间位置的元素小于目标值 target,则将左指针 left 移动到 mid + 1 的位置。
如果中间位置的元素大于目标值 target,则将右指针 right 移动到 mid - 1 的位置。
如果循环结束后仍未找到目标值,则返回 false。
时间复杂度:O()
空间复杂度:O(1)
cpp复制代码
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
int left = 0, right = m * n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
int row = mid / n;
int col = mid % n;
if (matrix[row][col] == target) {
return true;
} else if (matrix[row][col] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return false;
}
};