题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
牛客网:链接
首先选取数组中右上角的数字。如果要选左上角的数字,target比它大,是应该向右找还是应该向左找呢?这个是不确定的。所以应该从可以确定方向的数字开始找其。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数组,就向它前一列找,如果该数字小于要查找的数组,就向他下一行找。
while (i < row and j >= 0)这个语句中的()一定要加!如果不加判断array不为空就会出现问题。
不能用for循环,得用while。
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
row = len(array)
col = len(array[0])
if len(array) == 0:
return False
i = 0
j = col - 1
while (i < row and j >= 0):
if target == array[i][j]:
return True
elif target > array[i][j]:
i += 1
else:
j -= 1
return False
if __name__ == '__main__':
a = [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
b = Solution()
print(b.Find(14, a))
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int rows = array.size();
int cols = array[0].size();
if (!array.empty() && rows > 0 && cols > 0)
{
int i = 0;
int j = cols - 1;
while (i < rows && j >= 0)
{
if (array[i][j] == target){
return true;
}
else if (array[i][j] < target){
i++;
}
else{
j--;
}
}
}
return false;
}
};