停歇了许久的更文,于今日起开始续更,续更内容以算法为主,以此应对复杂多变的互联网环境,寻求更好的工作环境。
话不多说,开搞:
题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
1.顺序查找:
a、先做判空处理
b、遍历二维数组,由于此二维数组(每个一维数组的长度相同)每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。故我们先判断目标值是否在此二维数组最小值和最大值范围内,如果在则再去遍历,判断二维数组中每个元素是否有与目标值相等的,如果有则返回True,如果没有,则返回False。此外如果目标值不在二维数组最小值和最大值范围内,则也返回False。
此方案解题参考代码:
def Find(target, array):
# write code here
if len(array) == 0 or len(array[0]) == 0:
return 0
l = 0
r = len(array[0]) - 1
for i in range(len(array)):
if array[i][0] <= target <= array[i][-1]:
for j in range(len(array[i])):
if array[i][j] == target:
return True
return False
print(Find(15,[[1,2,4,6],[3,5,7,9],[8,10,11,13],[12,14,15,16]]))
2.二分查找法:
a、先做判空处理
b、同样是通过遍历方式,先判定目标值“target”在此二维数组元素范围内。然后设置两个变量:l(left)/r(right),然后通过while循环求解取中值mid,设置中值取值方法为mid = l + (r - l) // 2,若目标值大于array[i][mid],则将l设置为l = mid + 1,若目标值小于array[i][mid],即此时取的中值。否则则存在此target。
此方案解题参考代码:
def Find( target, array):
# write code here
if len(array) == 0 or len(array[0]) == 0:
return 0
for i in range(len(array)):
print(i) #0 1 2 3
print(len(array)) # 4
print(range(len(array))) # range(0,4)
if array[i][0] <= target <= array[i][-1]:
l = 0
r = len(array[0]) - 1
print(r) # 3
while (l <= r):
mid = l + (r - l) // 2
if array[i][mid] < target:
l = mid + 1
elif array[i][mid] > target:
r = mid - 1
else:
return True
return False
print(Find(15,[[1,2,4,6],[3,5,7,9],[8,10,11,13],[12,14,15,16]]))
因目前在通过Python开发工具进行编程学习,故当前仅介绍Python实现的两种方式。一起学习哈,有更好的方式请留言沟通交流。谢谢!
可关注下方个人公众号进行投稿分享哦:
WechatIMG305.jpeg
有一起学习交流python或者算法的小伙伴可以关注上方二维码进行沟通哦谢谢
网友评论