数据结构-堆

(该篇基本等价于up主视频的学习笔记记录)

基本概念

  • 堆是一种满足某种特性的完全二叉树
  • 大顶堆特性是父节点大于等于任一子节点,堆顶元素是整个堆最大的值
  • 小顶堆特性是父节点小于等于任一子节点,堆顶元素是整个堆最小的值
  • 基本操作及其时间复杂度
    • 访问(通过索引获取):-(堆没有索引)
    • 搜索(通过元素获取):O(N)
    • 插入:O(logn)
    • 删除:O(logn)

基本操作python实现

以小顶堆为例

#调用
import heapq
nums = [2, 3, 5, 1, 54, 23, 132]
#第一种创建堆方法
heap = []
for num in nums:
	#添加元素
    heapq.heappush(heap, num) 
#第二种创建堆方法
nums = [2, 3, 5, 1, 54, 23, 132]
heapq.heapify(nums)
#获取并删除堆顶元素
heapq.heappop(nums)
# 实现大根堆,通过自定义对象
import heapq
class MyObject:
    def __init__(self, val):
        self.val = val

    def __lt__(self, other):
        return self.val > other.val
q = []
heapq.heappush(q, MyObject(50))

#创建
Class Heap():
	def __init__(self):
		self.heap=[]
	#添加元素
	def add(self,val):
		self.heap.append(val)
		idx=self.size()-1
		while idx>0:
			root_idx=(idx//2) if idx%2 else (idx//2-1)
			if self.heap[idx]<self.heap[root_idx]:
				self.heap[idx],self.heap[root_idx]=self.heap[root_idx],self.heap[idx]
				idx=root_idx
			else:
			break
	#获取堆顶元素
	def top(self):
		return self.heap[0]
	#删除堆顶元素
	def del(self):
		del self.heap[0]
	#堆的长度
	def size(self):
		return len(self.heap)
	#遍历
	def traverse(self):
		for i in self.heap:
			print(i)

题目

熟悉数据结构

215. 数组中的第K个最大元素
692. 前K个高频单词

熟悉数据结构+算法

这里例举一般遇到这种数据结构的题都有哪些解法,建议先看算法解题套路相关文章

(待补充)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值