Loading

二维数组中的查找

题目描述


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

思路


1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15

  首先,我们将要查找的数字(命为tag)与右上角的数字比较。a.如果相等,则查找结束。b.如果tag小,那么删除一列。c.如果tag大,那么删除一行。所以我们可以这样缩小范围。

Python实现


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : MarkXu

def find(tag, array):
    rows = len(array) # 获取二维数组的行数
    cols = len(array[0]) # 获取二维数组的列数
    # 定义二维数组的两个索引,这里取[0][cols-1]即为右上角的数字
    i = 0
    j = cols - 1

    # 注意终止条件
    while i<=rows-1 and j>=0:
        if tag < array[i][j]:
            # 删除一列,也就是j-1
            j -= 1
        elif tag > array[i][j]:
            # 删除一行,注意,这里的删除是指向下增加,即i+1
            i += 1
        else:
            return True
    return False
    
if __name__ == "__main__":
    array = [[1, 2, 8,9], 
             [2, 4, 9, 12], 
             [4, 7, 10, 13],
             [6, 8, 11, 15]]

    tag = 5
    print(find(tag, array))
posted @ 2020-04-14 10:25  selfcs  阅读(91)  评论(0编辑  收藏  举报