题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
暴力求解法:由于数组中的元素是按规律存放的,对于xi,jx_{i,j}xi,j来说有xi−1,j
聪明法:由于存在某种规律,所以我们可以从最小的元素所在的位置或是最大的元素所在的位置,即二维数组的左下角或是右上角开始查找。若当前位置的元素小于查找的数时,行数加1;否则列数加1.
AC代码
暴力求解法
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
data = array[0]
# 全部元素
for i in range(1, len(array)):
data.extend(array[i])
if target in data:
return True
return False
聪明法
# 下三角寻找
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if array == None:
return None
# 行数和列数
rows, cols = len(array), len(array[0])
# 下三角寻找
row = rows - 1
col = 0
while row >= 0 and col <= cols - 1:
if array[row][col] == target:
return True
elif array[row][col] > target:
row -= 1
else:
col += 1
return False
# 上三角寻找
# -*- coding:utf-8 -*-
class Solution:
def Find(self, target, array):
# write code here
if array == None:
return None
# 行数和列数
rows, cols = len(array), len(array[0])
col = cols - 1
row = 0
while col >= 0 and row <= rows - 1:
if array[row][col] == target:
return True
elif array[row][col] > target:
col -= 1
else:
row += 1
return False
标签:return,target,offer,python,len,查找,array,col,row
来源: https://blog.csdn.net/Forlogen/article/details/104884269