题解 | #【模板】堆#

【模板】堆

https://www.nowcoder.com/practice/13f61c8c92404f5ea5d6fa4c692869fb

class Heap:
    def __init__(self) -> None:
        self.a = [0]    # 让下标从1开始,方便计算,该数不为堆中元素
        self.size = 0   # 堆元素数量

    def push(self, x):
        self.a.append(x)
        self.size += 1
        k = self.size
        while k > 1 and self.a[k//2] < self.a[k]:
            self.a[k//2], self.a[k] = self.a[k], self.a[k//2]
            k = k//2
        
    def top(self):
        if self.size == 0:
            return 'empty'
        return self.a[1]

    def pop(self):
        if self.size == 0:
            return 'empty'
        top = self.a[1]
        self.a[1] = self.a[-1]
        self.a.pop()
        self.size -= 1
        
        k = 1
        while 2*k <= self.size:
            j = 2*k
            if j < self.size and self.a[j] < self.a[j+1]:
                j += 1
            if self.a[k] >= self.a[j]:
                break
            self.a[k], self.a[j] = self.a[j], self.a[k]
            k = j
        return top


n = int(input())
hp = Heap()
for i in range(n):
    line = input().split()
    if line[0] == 'push':
        hp.push(int(line[1]))
    elif line[0] == 'top':
        print(hp.top())
    elif line[0] == 'pop':
        print(hp.pop())

全部评论

相关推荐

07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
07-02 13:52
门头沟学院 Java
点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务