题目描述
给定一个N \times MN×M的整形矩阵matrix和一个整数K, matrix的每一行和每一列都是排好序的。
实现一个函数,判断K是否在matrix中
[要求]
时间复杂度为O(N+M),额外空间复杂度为O(1)。
输入描述:
第一行有三个整数N, M, K
接下来N行,每行M个整数为输入的矩阵
输出描述:
若K存在于矩阵中输出"Yes",否则输出"No"
思路:
每一行依次对比,如果K小于当前行第一个值则说明K不存在矩阵中,直接返回;如果K大于当前行最后一个值,则K可能在下一行中,进入下一个循环;否则说明K如果在矩阵中则一定在当前行,一一对比即可。
最差时间复杂度O(2*(N-1)+M)
N ,M,K= input().split()
M = int(M)
#保存矩阵
matrix = []
for i in range(int(N)):
num=list(input().split())
matrix.append(num)
#默认值定位不在矩阵中
in_matrix = "No"
for line in matrix:
if int(K) < int(line[0]):
break
elif int(K) > int(line[M-1]):
continue
else:
for num in line:
if int(num) == int(K):
in_matrix = "Yes"
break

print(in_matrix)