Leetcode 74. 搜索二维矩阵

限于喜欢 提交于 2019-11-28 03:45:54

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;
	}
    

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!