原题
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
My Answer
思路分析
直接遍历数组,之前想着尝试如果既然数组向下向右都是递增,对数组从行列由小到大进行遍历时候,如果发现了array[i][j] > target
,则可以确定数组不含这个数字;经试验发现这个思路是错误的,因为遍历时候是对每行从左到右,再对行进行从上到下进行遍历;但是可能出现 target = 7, array = [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
的情况,此时当遍历到array[0][2]
的时候,出现 8 > 9
,返回False
,出现错误答案;故而去掉了判别条件,直接全部遍历,得到结果,代码如下:
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if not array:
return False
len_row, len_col = len(array), len(array[0])
for row_index in range(len_row):
for col_index in range(len_col):
if array[row_index][col_index] == target:
return True
else:
pass
return False
Reference Answer
思路分析
思路:从左下角或者右上角开始比较,从左下角开始遍历,比遍历值大的话直接进行 col + 1
,当出现比遍历值小的话,进行 row - 1
。
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if not array:
return False
len_row, len_col = len(array), len(array[0])
row, col = len_row - 1, 0
while row >= 0 and col < len_col:
if array[row][col] == target:
return True
elif array[row][col] > target:
row -= 1
else:
col += 1
return False