題目描述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
一、分析
這是一個行列有序二維數組,每行從左到右遞增,每列從上到下地遞增,例如
對此數組進行判斷,對應整數是否存在
二、代碼
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)