给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。
请注意,它是排序后的第k小元素,而不是第k个元素。
示例:
matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15]
],
k = 8,
返回 13。
说明:
你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2 。
第一行为k的值和矩阵的n的值
后续为n*n矩阵的数字,以空格分割
矩阵中第k小的元素
8 3 1 5 9 10 11 13 12 13 15
13
import sys k,n=list(map(int,sys.stdin.readline().split())) matrix=[] for i in range(n): matrix.extend(list(map(int,sys.stdin.readline().split()))) matrix.sort() print(matrix[k-1])
import math k, n = list(map(int, input().strip().split())) matrix = [] for i in range(n): matrix.append(list(map(int, input().strip().split()))) count = 0 p = [0 for _ in range(n)] while True: temp = [matrix[i][v] if v != -1 else math.inf for i, v in enumerate(p)] m = min(temp) row = temp.index(m) p[row] += 1 if p[row] >= n: p[row] = -1 count += 1 if count >= k: print(m) break
import heapq k, n = list(map(int, input().split())) matrix = [list(map(int, input().split())) for _ in range(n)] queue = [] heapq.heapify(queue) for i in range(n): for j in range(n): if len(queue) < k: heapq.heappush(queue, -matrix[i][j]) else: if matrix[i][j] < -queue[0]: heapq.heappop(queue) heapq.heappush(queue, -matrix[i][j]) print(-queue[0])