zoukankan      html  css  js  c++  java
  • LeetCode(703):找出数据流中的第K大元素

    题目描述

    image1.png

    实现思路一:堆

    一种比较经典的做法是:维护一个只有K个元素的最小堆
    这样,当前数据流中的第K大元素一定位于堆的顶部(数组头部)
    当有新的数据进入时,将其与堆顶元素比较
    若堆顶元素更大,则无视新的数据
    若堆顶元素更小,则将其移出堆,并将新元素放入堆,再重新整理堆


    在C++标准库中,堆可以使用PriorityQueue这个数据结构实现

    实现思路二:数组splice

    Javascript为数组提供了一种 splice方法
    它可以向/从数组中添加/删除项目(会改变原始数组)
    它可以接收3个参数
    image2.png
    表示可以删除index处开始的0个或多个元素,并使用第三个参数 来替换被删除的元素


    在每次接收新数据时
    1、将新数据push入数组
    2、对数据进行从大到小的排序
    3、如果数组长度大于K,则删除索引大于等于K的所有元素
    (使得每一次接收新数据后,数组的大小保持在K)
    最后返回索引为K-1的元素即可

    代码实现(Javascript)

    /**
     * @param {number} k
     * @param {number[]} nums
     */
    var KthLargest = function(k, nums) {
        this.k=k
        this.arr=new Array()
        if(nums.length>0){
            for(var i in nums){
                this.arr.push(nums[i])
            }
        }
        
    };
    
    /** 
     * @param {number} val
     * @return {number}
     */
    KthLargest.prototype.add = function(val) {
        this.arr.push(val)
        this.arr.sort(function(a,b){
            return b-a
        })
        if(this.arr.length>this.k){
            this.arr.splice(this.k, this.arr.length-this.k)
        }
        return this.arr[this.k-1]
    };
    
  • 相关阅读:
    爬虫requests模块 1
    刷题记录:ctf473831530_2018_web_virink_web
    刷题记录:[RCTF 2019]Nextphp
    CTF XSS
    PHP 7 源码学习 序&第一、二章
    刷题记录:[安洵杯 2019]iamthinking
    刷题记录:[GWCTF 2019]枯燥的抽奖
    preg_match绕过总结
    刷题记录:[SWPU2019]easy_python
    刷题记录:[GWCTF 2019]我有一个数据库
  • 原文地址:https://www.cnblogs.com/baebae996/p/13869753.html
Copyright © 2011-2022 走看看