从今天开始攻克 「剑指Offer」。网络上众大神分享的思路及代码,大都已经非常仔细和清楚了。抱着学习的态度,开启「剑指Offer [Python] 」系列博文 —— 「转载」思路详细易懂的、python语言的众大神博文,加之对各方资料进行「整理 & 汇总」,「学习 & 对比」多种思路(i.e. 暴力解法 vs 快速解法)。
八月快来了,秋招要到了,一起加油拿下编程吧!✋
❤️ 「更多题目」
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一、快速解法
-
思路
首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数组,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。 -
举例
如果在一个二维数组中找到数字7,存在则返回True,如果没找到则返回False。
- Python实现:
class Solution:
def Find(self, target, array):
rows = len(array)
cols = len(array[0])
if rows > 0 and cols > 0 :
row = 0
col = cols - 1
while ( row < rows and col >= 0) :
if target == array[row][col]:
return True
elif target < array[row][col]:
col -= 1
elif target > array[row][col]:
row += 1
else:
return False
if __name__=='__main__':
target=2
array=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7]]
solution=Solution()
ans=solution.Find(target,array)
print(ans)
来源:https://blog.csdn.net/qq_33487726/article/details/90715996
二、暴力解法
- 思路
遍历数组中所有元素 - Python实现
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
for line in array:
if target in line:
return True
return False
---------------------
作者:谓之小一
来源:CSDN
原文:https://blog.csdn.net/xiaoyi_eric/article/details/81452014
版权声明:本文为博主原创文章,转载请附上博文链接!