题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:题目中指出是数组顺序排序的,因此可以根据这个条件优化搜索路径。
1.从左上角开始:向右与向下都是增加的,因此无法根据当前值判断下一步的走向。
2.从右上角开始:向左是减小的,向下是增加的,因此根据当前值可以判断出下一步的走向。
3.从左下角开始:向右是增加的,向上是减小的,因此根据当前值可以判断出下一步的走向。
4.从右下角开始:向左是减小的,向上是减小的,因此根据当前值无法判断出下一步的走向。
总结可知:可以从2,3进行搜索。
c++:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.empty())
return false;
int rows = array.size();
int columns = array[0].size();
int row=0;
int column=columns-1;
while(row<rows && column>=0)
{
if(target==array[row][column])
return true;
else if(target > array[row][column])
++row;
else
--column;
}
return false;
}
};
python版的也可以通过上面修改。
下面根据python的内置函数写:
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
rows=len(array)
if rows==0:
return False;
for i in array:
if target in i:
return True;
return False
# write code here