题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
思路:
从某一个角开始查找,然后指针向两个方向移动。如果从左上角开始,由于current<target时,向右向下都更大,会有歧义(从右下角开始同理),如果从左下角开始,当current<target时,说明应当向右移动一格,当current>target时,说明应当向上移动一格,没有歧义。(从右上角开始同理)
class Solution:
def Find(self, target, array):
if target is None or array is None:
return False
col = 0
row = len(array) - 1
while row >= 0 and col < len(array[0]):
if target == array[row][col]:
return True
elif target > array[row][col]:
col = col + 1
elif target < array[row][col]:
row -= 1
return False
涉及的知识点:一维数组的查找
1.顺序查找
def Find(target, values):
for i in range(0, len(values)):
if values[i] == target:
return True
return False
2.二分查找
循环实现和递归实现
def Binary(target, values):
left = 0
right = len(values) - 1
while left <= right: # 如果左右指针不碰头,则
mid = (left + right) // 2
if values[mid] == target:
return mid
elif values[mid] > target:
left = mid + 1
elif values[min] < target:
right = mid -1
return False
def Binary_recursive(target, values, left, right):
if left > right:
return False
mid = (left + right) // 2
if target == values[mid]:
return mid
elif target > values[mid]:
return Binary_recursive(target, values,mid + 1, right)
else:
return Binary_recursive(target, values,left, mid - 1)