牛客網-- 二維數組中的查找

題目描述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
思路分析
我的思路比較簡單粗暴,既然是有規律數組,那就按照它的規律來。大概核心思路如下圖:
在這裏插入圖片描述
細節注意

  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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章