题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
最小值为左上方值,最大值在右下方,从左下方开始,小于目标值则向右,大于目标值向上
python代码
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if not array:
return False
m = len(array)
if m == 0:
return False
n = len(array[0])
if n == 0:
return False
if target < array[0][0] or target > array[m-1][n-1]:
return False
cur_m = m - 1
cur_n = 0
while cur_m >= 0 and cur_n < n:
if array[cur_m][cur_n] == target:
return True
elif array[cur_m][cur_n] > target:
cur_m -= 1
else:
cur_n += 1
return False
c++代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int m;
int n;
int a;
int b;
m = array.size();
if(m == 0)
{
return false;
}
n = array[0].size();
a = m - 1;
b = 0;
while(a > -1 & b < n)
{
if(array[a][b] == target)
{
return true;
}
if(array[a][b] > target)
{
a = a - 1;
}
else
{
b = b + 1;
}
}
return false;
}
};