力扣74 搜索二维矩阵
获取矩阵的行数和列数
vector<vector<int>>& matrix
matrix 是一个 vector<vector<int>> 类型的二维向量,其本质是一个嵌套的动态数组
matrix.size() 返回的是外层 vector 的大小,即有多少个 vector<int> 元素,也就是二维向量的行数
matrix[0] 是第一行的 vector<int>,即第一个 vector<int> 元素
matrix[0].size() 返回第一行的大小,也就是该行中 int 元素的数量,即列数
一维索引与二维坐标的转换
在二维数组中,如果将所有元素按行优先的方式展开为一维数组,那么任意一维索引 mid 对应的二维坐标为:
row = mid / n
col = mid % n
在 C++ 中,数组索引是从 0 开始的
错误代码
class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m=matrix.size();int n=matrix[0].size();int left=0;int right=m*n;while(left<=right){int mid=left+(right-left)/2;int row=mid/n;int col=mid%n;if(target<matrix[row][col]){right=mid-1;}else if(target>matrix[row][col]){left=mid+1;}else{return true;}}return false;}
};
注意把right初试为m*n-1
正确代码
class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m=matrix.size();int n=matrix[0].size();int left=0;int right=m*n-1;while(left<=right){int mid=left+(right-left)/2;int row=mid/n;int col=mid%n;if(target<matrix[row][col]){right=mid-1;}else if(target>matrix[row][col]){left=mid+1;}else{return true;}}return false;}
};