二维数组中查找

二维数组中的查找

题目描述

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

输入输出示例

示例1
输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值:true
说明:存在7,返回true
示例2
输入:3,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值:false
说明:不存在3,返回false

解题思路

array = [ [1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15] ]
数组内元素值从左往右,从上到下递增
从数组中第一行i=0最后一列j=len(array[0])-1所定位的元素value=array[i][j]开始比较,
如果当前value值等于目标值target,则直接返回True;
如果当前value值大于target,由于数组递增性质,value所在行以后的行中元素均大于当前value,则说明value所在行以后的行中一定不会存在与target值相等的元素,即改变列,j-1,当前行向前遍历比较;
如果当前value值小于target,由于数组递增性质,当前行下,value所在列以前的列中元素均小于当前value,则说明当前行下value所在列以前的列中一定不会存在与target值相等的元素,即改变行,i+1,向下循环比较;

代码示例

class Solution():
    def find(self, target, array):
        row_count = len(array)  # 二维数组的行数
        col_count = len(array[0])  # 二维数组的列数

        i = 0 # 初始化 i从0开始 第一行
        j = col_count -1 #j从最后一列开始
        # 循环条件:行遍历到最后一行结束(只要i小于最大行下标就继续遍历)
        # 列遍历到第一列结束(只要列大于第一列下标就继续遍历)
        while i < row_count and j>= 0:
            value = array[i][j]  # 所遍历到的数组中的值
            if value == target:
                # 如果当前值等于目标值,返回True
                return True
            elif value > target:
                # 如果当前值大于目标值,因为由上往下递增,
                # 所以该行以后的行中不存在与其相等的值
                # 当前列-1,即改变列,从后往前遍历当前行中的值
                j -= 1
            else:
                # 如果当前值小于目标值,因为由左往右递增,
                # 所以该行整行中不存在与其相等的值
                # 行+1,即改变行,从上往下遍历当前列中的值
                i += 1
        return False

if __name__ == '__main__':
    s = Solution()
    target = 11
    array = [
        [1,2,8,9],
        [2,4,9,12],
        [4,7,10,13],
        [6,8,11,15]
    ]
    result = s.find(target, array)
    print(result)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值