牛客网-- 二维数组中的查找

题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路分析
我的思路比较简单粗暴,既然是有规律数组,那就按照它的规律来。大概核心思路如下图:
在这里插入图片描述
细节注意

  1. 本题的二维数组传参是以vector里套vector的形式给出来的,所以一定要熟悉关于vector的一些操作。
  2. 由于这个题目是在牛客网上的,一开始我写的时候并没有给传进来的数组判空,所以提交代码一直报错说

程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)”错误的可能原因

后面我想了想,如果不给二维数组和二维数组里的每一行的一维数组判空,而同时使用vector里的size()函数,就会引发错误。所以,一定要判空!

源代码:

class Solution
{
public:
	bool Find(int target, vector<vector<int>> array)
	{
		//注意一定要先判空,再求array的size
		if (array.empty())
		{
			return false;
		}
		int len = array.size();
		//int lensize = array[0].size();
		for (size_t i = 0; i < len; i++)
		{
			if (array[i].empty())
			{
				continue;
			}
			if (target == array[i][0])
			{
				return true;
			}
			if (target > array[i][0])
			{
				if (target <= array[i][array[i].size() - 1])
				{
					for (size_t j = 0; j < array[i].size(); j++)
					{
						if (target == array[i][j])
						{
							return true;
						}
					}
				}
			}
		}
		return false;
	}
};
int main()
{
	vector<vector<int>> v{ {10,20,30},{11,22,33},{100},{200},{300},{120,220,330} };
	Solution s;
	if (s.Find(100, v))
	{
		cout << "find it" << endl;
	}
	else
	{
		cout << "can't find" << endl;
	}
	system("pause");
	return 0;
}
发布了50 篇原创文章 · 获赞 30 · 访问量 9178

猜你喜欢

转载自blog.csdn.net/qq_42913794/article/details/102693350