美文网首页技术干货
剑指offer之Python二维数组中的查找

剑指offer之Python二维数组中的查找

作者: a295ff153449 | 来源:发表于2020-01-09 23:12 被阅读0次

    停歇了许久的更文,于今日起开始续更,续更内容以算法为主,以此应对复杂多变的互联网环境,寻求更好的工作环境。

    话不多说,开搞:

    题目描述:

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

    解题思路:

    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或者算法的小伙伴可以关注上方二维码进行沟通哦谢谢

    相关文章

      网友评论

        本文标题:剑指offer之Python二维数组中的查找

        本文链接:https://www.haomeiwen.com/subject/afcuactx.html