4-8 Python数据结构常考题之堆

Python工程师面试宝典 专栏收录该内容
54 篇文章 0 订阅
一、堆

堆的常考题基本围绕在合并多个有序(数组/链表);TopK问题
1.理解堆的概念,堆是完全二叉树,有最大堆和最小堆
2.全使用python内置的 heapq模块实现堆的操作
3.常考题:合并K个有序链表 leetcode merge-k-sorted-list

# leetcode 第23号题目: 合并K个升序链表
from heapq import heapify, heappop

class ListNode:
	def __init__(self, val=0, next=None):
		self.val = val
		self.next = next

class Solution:
	def mergKLists(self, lists):
		# 读取所有节点值
		h = []
		for node in lists:
			while node:
				h.append(node.val)
				node = node.next

		if not h:   # h 为空时,返回 None,不然会报错
			return None
		# 构造一个最小堆
		heapify(h)   # 转换成最小堆

		# 构造链表
		root = ListNode(heappop(h))
		cur_node = root
		while h:
			next_node = ListNode(heappop(h))
			cur_node.next = next_node
			cur_node = next_node
		return root
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值