[算法] - 二维数组数据查找

描述:

给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。要求时间复杂度 O(M + N),空间复杂度 O(1)。

思路:

考虑到时间复杂度,对角线比较大小进行查找。

解答:

def metrix_query():
    target = 18
    data = [
        [1,   4,  7, 11, 15],
        [2,   5,  8, 12, 19],
        [3,   6,  9, 16, 22],
        [10, 13, 14, 17, 24],
        [18, 21, 23, 26, 30]
    ]
    row, col = 5, 5
    r, c = 0, col-1
    while r < row and c >= 0:
        if data[r][c] == target:
            return True, r, c
        elif data[r][c] < target:
            r += 1
        else:
            c -= 1
    return False, None, None

print metrix_query()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 找出数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,...
    BookThief阅读 5,863评论 0 2
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,390评论 0 13
  • 数组是最简单的数据结构,占据连续内存并且按顺序存储。 以下是与数组有关的算法题目。 (1)查询数组中重复数字 算法...
    顽皮的石头7788121阅读 6,353评论 0 0
  • 数组 记录《剑指offer》中所有关于数组的题目,以及LeetCode中的相似题目 相关题目列表 说明 由于简书...
    wenmingxing阅读 5,381评论 1 12
  • 《小狗钱钱》读后感 非常开心能够在二十岁初就了解到投资理财这件事情,并且知道他的重要性。虽然不及书中的吉娅早...
    胖香蕉阅读 1,404评论 0 0