剑指Offer(Python)二维数组中的查找
推荐在线编程平台
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析
由题意我们可以知道,该二维数组最左上角的元素最小,最右下角的元素最大,所以我们可以先判断目标值与这两个元素的大小。这里有两种情况我们可以分别考虑:
目标超过这两个元素的范围
如果目标小于数组最小值或者大于最大值,那么我们就可以判断出它不在二维数组里面。目标在两个元素之间
当目标元素在两个值之间的时候,我们可以对二维数组进行遍历,判断每一层的元素:如果目标元素比该层第一个小或者比最后一个元素大,则说明不在该层,直接跳过。如果目标元素在该层范围里面,则遍历该层,如果没有元素与之匹配则说明该二维数组不包含目标值。
代码
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
if (array == None or len(array) == 0):
return 0
for x in array:
if (x == None or len(x) == 0):
return 0
if (x[0] > target and x[len(x) - 1] < target):
break
for y in x:
if (y == target):
return 1
return 0
也可以直接用两个for循环判断每一个元素与目标的值
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
for x in array:
for y in x:
if (y == target):
return 1
return 0