python矩阵输出小数_force buckle-378有序矩阵的第k个最小数(不带heapq,用纯Python小根堆实现),力扣,无,python...

题目描述

给定一个

n x n

矩阵,其中每行和每列元素均按升序排序,找到矩阵中第

k

小的元素。

请注意,它是排序后的第

k

小元素,而不是第

k

个不同的元素。

解题思路

上一篇博客直接使用了python 的内置包heapq来实现,这篇博客使用python来实现小根堆代码,代码不能直接贴上去运行,有些变量命名名字不同

def Heap_adjust(data, start, end):

i = start; j = 2 * i + 1

while j < end:

if j + 1 < end and data[j][0] > data[j + 1][0]:

j += 1

if data[i][0] > data[j][0]:

data[i], data[j] = data[j], data[i]

i = j

j = 2 * i + 1

else:

break

#测试Heap_adjust函数能否正确运行

# a = [10, 1, 2, 5, 4, -1, 0]

# m = len(a)

# count = m // 2

# for i in range(count):

# Heap_adjust(a, count - i - 1, m)

# print(a)

def Build_heap(data):

m = len(data)

count = m // 2

for i in range(count):

Heap_adjust(data, count - i - 1, m)

return data

matrix = [[ 1, 5, 9],

[10, 11, 13],

[12, 13, 15]]

target = 6

m = len(matrix); n = len(matrix[0])

data = [(matrix[i][0], i, 0) for i in range(m)]

min_heap = Build_heap(data)

for i in range(target - 1):

num, x, y = min_heap.pop(0)

min_heap = Build_heap(min_heap)

if y != n - 1:

min_heap.append((matrix[x][y + 1], x, y + 1))

min_heap = Build_heap(min_heap)

print(min_heap.pop(0)[0])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值