分析:
- 从右上角的数开始寻找
- 右上角比k小,说明k不可能在第一行了,看下面的行
- 右上角比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)
运行结果如下: