python实现杨氏矩阵查找

# _*_ coding:utf-8 _*_
'''
    @author:xianyt
    @date:2018/
    @func:在一个 m 行 n 列二维数组中, 每一行都按照从左到右递增的顺序排序每一列照从上到下递增的顺序排序。
    请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整

    实现思路:
        如果查找的数字小于最小的或者大于最大的即返回找不到
        从右上角开始检查,范围逐步往下缩减
        当这个数大于目标值则剔除该行
        当这个数小于目标值说明不在此列
'''
def find_num(nums, target, rows, cols):
    '''
    :param nums:   杨氏矩阵
    :param target:   要查找的数
    :param rows:   行数
    :param cols:    列数
    :return:   Ture/False
    '''
    if target<nums[0][0] or target>nums[rows-1][cols-1]:
        return False
    i = 0
    j = cols-1
    while i<rows or j<0:
        #如果右上角大于目标值则去除该行
        if target>nums[i][j]:
            i += 1
            continue
        #如果右上角小于目标值则去除该列
        elif target<nums[i][j]:
            j -= 1
            continue
            #如果找到了则返回下标
        elif target==nums[i][j]:
            return (i,j)
    # 没有找到
    return False


if __name__ == "__main__":
    nums = [[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]]
    print(find_num(nums, 23, 5, 5))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值