首页 > 其他分享 >leetcode Kth Largest Element in a Stream——要熟悉heapq使用

leetcode Kth Largest Element in a Stream——要熟悉heapq使用

时间:2023-05-30 17:31:38浏览次数:37  
标签:heapq val Stream self KthLargest arr Element add

703. Kth Largest Element in a Stream

Easy

Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element.

Your KthLargest class will have a constructor which accepts an integer k and an integer array nums, which contains initial elements from the stream. For each call to the method KthLargest.add, return the element representing the kth largest element in the stream.

Example:

int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3);   // returns 4
kthLargest.add(5);   // returns 5
kthLargest.add(10);  // returns 5
kthLargest.add(9);   // returns 8
kthLargest.add(4);   // returns 8

Note:
You may assume that nums' length ≥ k-1 and k ≥ 1.

 

"""
 1 import heapq
 2 def heapsort(iterable):
 3     h = []
 4     for i in iterable:
 5         heapq.heappush(h, i)
 6     return [heapq.heappop(h) for i in range(len(h))]
 7 
 8 # method 1: sort to list
 9 s = [3, 5, 1, 2, 4, 6, 0, 1]
10 print(heapsort(s))
11 '''
12 [0, 1, 1, 2, 3, 4, 5, 6]
13 '''
"""
import heapq

class KthLargest(object):

    def __init__(self, k, nums):
        """
        :type k: int
        :type nums: List[int]
        """
        self.arr = []
        self.k = k
        for i in nums:
            if len(self.arr) < self.k:
                heapq.heappush(self.arr, i)
            else:
                if i > self.arr[0]:
                #if heapq.nsmallest(1, self.arr)[0] < i:
                    heapq.heapreplace(self.arr, i)
                    #heapq.heappop(self.arr)
                    #heapq.heappush(self.arr, i)


    def add(self, val):
        """
        :type val: int
        :rtype: int
        """
        if len(self.arr) < self.k:
            heapq.heappush(self.arr, val)
        else:
            if val > self.arr[0]:
            #if heapq.nsmallest(1, self.arr)[0] < val:
                heapq.heapreplace(self.arr, val)
                #heapq.heappop(self.arr)
                #heapq.heappush(self.arr, val)            
        assert len(self.arr) == self.k
        return self.arr[0]
        #return heapq.nsmallest(1, self.arr)[0]
            


# Your KthLargest object will be instantiated and called as such:
# obj = KthLargest(k, nums)
# param_1 = obj.add(val)

注意:如果使用heapq.nsmallest(1, self.arr)[0]来返回heap的最小值会有超时问题。

标签:heapq,val,Stream,self,KthLargest,arr,Element,add
From: https://blog.51cto.com/u_11908275/6381043

相关文章

  • 黑马Vue3 + ElementPlus + Pinia 小兔鲜电商项目2023版
    黑马Vue3+ElementPlus+Pinia小兔鲜电商项目2023版download:3w51xuebccomElementPlus:优雅高效的Vue组件库随着Vue.js在前端开发中的广泛应用,越来越多的UI组件库涌现出来。而其中一款备受瞩目的组件库就是ElementPlus。作为一款基于Vue3.0的组件库,ElementPlus不仅完美地继承了......
  • element-ui中Select 选择器value-key的使用
    场景描述很多时候我们都需要使用下拉框Select选择器。在获取值的时候,通常只需要传递对应的id给后端就行了。但是特殊情况,后端不想去查库,不仅需要我们id,还有name,code之类的。这个时候前端通过id去查询对应的name,code这样做会写循环,查询,非常的麻烦。其实Select选择器......
  • ElementUI的form表单验证注意事项
    ElementUI的form表单验证注意事项1.踩过的坑,记录一下。验证表单时一直提示必填项未填写,实际已经填写了。2.el-form的正确使用流程el-form就是最外层的form表单,做验证有三个必填属性,不填写验证就会不正确。ref属性:相当于ID,稍后的提交按钮函数会用到它。:model:绑定要用......
  • Java中的Stream基本使用
    一Java中的流库Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用StreamAPI对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用StreamAPI来并行执行操作。简而言之,StreamAPI......
  • Java-Day-25( 字节输入流 + FileInputStream 和 FileOutputStream + FileReader 和 Fi
    Java-Day-25InputStream(字节输入流)InputStream抽象类是所有类字节输入流的超类InputStream常用的子类FileInputStream:文件输入流BufferedInputStream:缓冲字节输入流ObjectInputStream:对象字节输入流FileInputStream和FileOutputStreamFileInputStream(文......
  • element ui 编辑页面 重新选择日期后页面显示的日期没反应
    问题:可以看到数据是实时更新了。加一个强制渲染显示正常了 this.$forceUpdate()方法会触发一次视图重新渲染,即使组件没有显式声明要更新数据或属性,也可以强制刷新页面。但是,由于它可能带来性能和其他副作用,因此应该尽量避免使用,并且只用于特定情况下的修复。......
  • 关于VBA的TextStream StdOut相关程序的学习——源代码(刘永富博士的ExcelVBA编程开发)
    Subtest3()'标准输出-查找相关目录下所有的GIF格式文件。DimTS1AsIWshRuntimeLibrary.TextStreamDimTS2AsIWshRuntimeLibrary.TextStreamSetWShell=NewIWshRuntimeLibrary.WshShellSetWE=WShell.Exec("cmd.exe/k")SetTS1=WE.StdInTS1.......
  • 直播app开发搭建,Vue Element UI Upload 上传多张图片
    直播app开发搭建,VueElementUIUpload上传多张图片<template> <div>  <el-card>   <h1>轮播图-图片上传管理</h1>   <el-divider></el-divider>   <!--注意:使用:model="uploadImgForm"不要使用v-model="uploadImgForm&q......
  • Build for Libjingle 0.5.2 + Mediastreamer2
    Mediastreamersupportin0.5.0[url]http://code.google.com/p/libjingle/issues/detail?id=102[/url]补充上面的patch:libjingleincludedirs"third_party/mediastreamer2/include","third_party/ortp/include",call......
  • java8 stream匹配 anyMatch,allMatch,noneMatch
    anyMatch:判断的条件里,任意一个元素成功,返回trueallMatch:判断条件里的元素,所有的都是,返回truenoneMatch:与allMatch相反,判断条件里的元素,所有的都不是,返回truecount方法,跟List接口中的.size()一样,返回的都是这个集合流的元素的长度,不同的是,流是集合的一个高级工厂,中间操作是工厂里......