二维数组查找

二维数组中的查找

http://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e

重点:

  1. 数组为空

  2. 排好序

  3. 上面行的右边的数也可以比下面行左边的数大

    顺序查找

     def Find(self, 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

    二分查找

     def Find(self, target, array):
         # write code here
         if len(array)==0 or len(array[0])==0:
             return 0
    
         for i in range(len(array)):
             if array[i][0]<=target<=array[i][-1]:
                 l=0
                 r=len(array[0])-1
                 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
全部评论
这是相当于逐行二分?时间复杂度是行数*lg(列数)?
1 回复 分享
发布于 2020-07-01 11:10
求问大佬们为什么判断array为空if not array: return False不行。这个和“行数为0或列数为0”区别是什么?求解
1 回复 分享
发布于 2020-01-09 13:37
二分查找法显示运行超时?
点赞 回复 分享
发布于 2020-08-17 17:20
另外,我发现 顺序查找中 第5行 l = 0 这一行代码时多余的
点赞 回复 分享
发布于 2019-11-18 14:26
答主,你好,我有个疑问: len(array) 指的是数组中元素的总个数,还是 数组的行数? 按我的理解,len(array) 指的是元素的总个数,请问我的理解有误吗? 另外,前面有位朋友提到边界问题,确实存在:以一维数组为例:a = [1, 2, 3, 4, 5] ==> a[0: -1] = [1, 2, 3, 4] 缺了最后一个元素
点赞 回复 分享
发布于 2019-11-18 14:21
有序矩阵的二分查找的方法很nice。
点赞 回复 分享
发布于 2019-11-05 21:59
array[i][-1]会被判定为越界,应该使用array[i][r]
点赞 回复 分享
发布于 2019-10-15 21:00

相关推荐

野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
评论
21
3
分享

创作者周榜

更多
牛客网
牛客企业服务