https://leetcode-cn.com/problems/search-a-2d-matrix/submissions/
思路:
由于矩阵的每行都是递增的,且每行的首元素都大于上一行的尾部元素,所以把矩阵由二维数组变成一个一维数组的话是有序的,所以是二分查找。变成一维数组并不是真的去把矩阵储存到一个一维数组里面去,而是通过坐标转化方式去投影到一维数组里面
class Solution {
public:
bool searchMatrix(vector<vector<int> >& matrix, int target) {
int rows = matrix.size();//求行数
if(rows == 0)
return false;
int columns = matrix[0].size();//求列数
int start = 0;
int end = rows * columns -1;//在一维数组时候头部和尾部指针
while(start <= end)
{
int mid = start + ((end - start )>>1);
//因为mid = i * columns + j (i, J )是二维数组下标,mid是一维数组对应下标
//数学公式就是mid / columns = i...j
if(matrix[mid / columns][mid % columns] == target)
return true;
else if(matrix[mid / columns][mid % columns] < target)
start = mid + 1;
else
end = mid - 1;
}
return false;
}
};
------------------
附-------
STL 二维vector操作
vector<vector<int> >vec;
int rows, columns;//行数和列数
cin>>rows>>columns;
for(int i = 0; i < rows; i++)
{
vector<int>temp;
for(int j = 0 ; j < columns; j++)
{
int value;
cin>>value;
temp.push_back (value);
}
vec.push_back (temp);
}
cout<<"行数:"<<vec.size()<<endl;//计算行数
cout<<"列数: "<<vec[0].size()<<endl;//计算列数
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < columns; j++)
cout<<vec[i][j]<<" ";
cout<<endl;
}
来源:https://blog.csdn.net/qq_40722582/article/details/97228831