每日刷算法--劍指offer二維數組中的查找

在這裏插入圖片描述
題目描述

在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

一、分析
這是一個行列有序二維數組,每行從左到右遞增,每列從上到下地遞增,例如在這裏插入圖片描述
對此數組進行判斷,對應整數是否存在
二、代碼
1.時間複雜度較高的算法

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int len = array[0].size();
	for (auto vec : array)
	{
			int low = 0;
			int high = len - 1;
			int mid;
			while (low <= high)
			{
				mid = (low + high) / 2;
				if (target == vec[mid])
				{
					return true;
				}
				else if (target < vec[mid])
				{
					high = mid - 1;

				}
				else
				{
					low = mid + 1;
				}
			}	
	} 
	return false;
    }
};

算法複雜度分析:while循環算法是二分法,時間複雜度爲O(log2(N)),,for循環複雜度爲O(n),所以程序的時間複雜度爲O(nlog2(N))
2.時間複雜度最小的算法

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int column= array.size()-1;
	int row = 0;
	while (column>=0&&row<array[0].size())
	{
		if (array[column][row] == target) {
			return true;
		}
		else if (array[column][row] > target)
		{
            column -= 1;
		}
		else
        {
            row += 1;
        }
		
	}
	return false;
    }
};

時間複雜度分析:O(row+column)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章