数组 | 二维数组中的查找

题目:

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数

思路:

从某一个角开始查找,然后指针向两个方向移动。如果从左上角开始,由于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)
            

参考链接:https://codingcat.cn/article/20 

猜你喜欢

转载自blog.csdn.net/kylin_learn/article/details/88928213