题解 | #在行列都排好序的矩阵中找指定的数#
在行列都排好序的矩阵中找指定的数
https://www.nowcoder.com/practice/b929be9dbbaa489a91afa3fec195c228?tpId=101&tags=&title=&difficulty=&judgeStatus=&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&gioEnter=menu
m,n,k = [int(item) for item in input().split()] matrix = [[0]*n for _ in range(m)] for i in range(m): matrix[i] = [int(item) for item in input().split()] def loc(matrix,a,b,k): m,n = a,b if matrix[m-1][n-1] < k: return('No') while m>0 or n>0: if matrix[m-1][n-1] < k: for i in range(m): if matrix[i][n] == k: return('Yes') for j in range(n): if matrix[m][j] == k: return('Yes') return('No') elif matrix[m-1][n-1] == k: return('Yes') else: m = max(m-1,0) n = max(n-1,0) return('No') print(loc(matrix,m,n,k))
借用wywzxxz大佬的话,如果一个位置(i,j)的数>K,显然它下边、右边、右下的数一定>K,因此在后边的查询中看都不用看。 所以直接从最右下一个个判断就行,每次往上往左移动一个(如果能移动),遇到第一个比k小的数之后返回第m行第n列进行寻找。最多应该是m+n次(最右下的数比k大,斜上方的数比k小,比较两次,还要对最后一行最后一列的数进行比较,比较m+n-2次)。