在行列都排好序的矩阵中找数-python3

分析:

  1. 从右上角的数开始寻找
  2. 右上角比k小,说明k不可能在第一行了,看下面的行
  3. 右上角比k大,说明k不可能在最后一列,看左边的列

代码如下:

#coding=utf-8
'''
在行列都排好序的矩阵中找数
【 题目】 给定一个有N*M的整型矩阵matrix和一个整数K,
matrix的每一行和每一列都是排好序的。实现一个函数,判断K
是否在matrix中。 例如: 0 1 2 5
                       2 3 4 7
                       4 4 4 8
                       5 7 7 9
如果K为7, 返回true; 如果K为6, 返回false。
【 要求】 时间复杂度为O(N+M), 额外空间复杂度为O(1)。
'''
import numpy as np
def isContains(matrix,k):
    row=0
    col=matrix.shape[1]-1
    while row<matrix.shape[0] and col>-1:
        if matrix[row,col]==k:
            return True
        elif matrix[row,col]>k:
            col-=1
        else:
            row+=1
    return False

if __name__=="__main__":
    matrix=[[0,1,2,5],[2,3,4,7],[4,4,4,8],[5,7,7,9]]
    matrix=np.array(matrix)
    # matrix=np.arange(1,21).reshape((4,5))  # 4行4列,1到17
    print(type(matrix))
    print(matrix.shape)
    print("="*20)
    s=isContains(matrix,7)
    print(s)

运行结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值