编程笔记一
1.有序二维数组查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
- 解法一(暴力求解):
基于顺序查找算法(属于无序查找算法),对数组进行顺序搜索。
时间复杂度: O ( n ∗ m ) O(n*m) O(n∗m)(n行m列矩阵)
空间复杂度: O ( 1 ) O(1) O(1)
- C++实现
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int row = array.size();
int column = array[0].size();
for(int i = 0; i < row; i++)
{
for(int j = 0; j < column; j++)
{
if (array[i][j] == target)
{
return true;
}
}
}
return false;
}
};
运行时间:11ms
占用内存:1504k
- Python实现
class Solution:
# array 二维列表
def Find(self, target, array):
for i in array:
for j in i:
if j == target:
return True
return False
运行时间:415ms
占用内存:5700k
- 解法二(矩阵特性):
题目中的矩阵特性:矩阵行递增,列递增。因此,可以通过选择极限位置(矩阵左下角:列MAX,行MIN,或者矩阵右上角:列MIN,行MAX),因此只需要target与matrix[i][j]比较即可。
极限位置以矩阵左下角(列MAX,行MIN)例:
- a