题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1、2两个笨办法。。
思路1:循环嵌套
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
for i in range(len(array)):# len(A)=4 行数row
for j in range(len(array[i])):
if target == array[i][j]:
return True
return False
运行时间:421ms
占用内存:5752k
思路2:与每一行头尾作比较,然后与中间数比较
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if len(array[0]) == 0:
return False
else:
row = len(array)# 行数
col = len(array[0])# 列数
def equa(target, i):
for j in range(1,col-1,1):# 搜索已定位到的行
if target == array[i][j]:
return True
return False
for i in range(row):
if target>array[i][0] and target<array[i][col-1]:# 每行第一个数做比较,定位到所在行
if equa(target, i):
return True
elif target==array[i][0] or target==array[i][col-1]:# 如果那个数就是第一个数
return True
return False
运行时间:333ms
占用内存:5680k
思路3:从左上角开始找,大于则排除整列,左移一个数继续,小于则往下看,重复以上

找6的顺序如图:
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if len(array[0])==0:# 二维数组为空
return False
else:
i = 0
j = len(array[0])-1
while i<len(array) and j>=0:
if target<array[i][j]:
j-=1
elif target>array[i][j]:
i+=1
else:
return True
return False
运行时间:303ms
占用内存:5624k
思路4:与对角线做比较,再与确定位置后的左下角、右上角两块区域的数比较。
————————————————
图片来源:https://blog.youkuaiyun.com/u010005281/article/details/79804193

本文介绍了一种在特殊排序的二维数组中查找特定整数的方法,提供了四种不同的算法思路,包括循环嵌套、与行首尾比较、从左上角开始查找和与对角线比较,详细解析了每种方法的实现过程及效率。
4652

被折叠的 条评论
为什么被折叠?



