数据流中第 K 大的元素

数据流中第 K 大的元素

问题

这个题目说的是,你要实现一个类,用来求数据流中第 K 大的元素。你需要实现这个类中的两个函数。第一个是构造函数,它接收一个整数数组以及一个整数 K,整数数组作为初始数据流。第二个是 add 函数,接收一个整数表示新流入的数据,然后返回当前第 K 大的元素。

比如说,给你的 K 是 3,初始的数组是:

1, 5, 2, 8

这时假如调用 add 函数增加一个数字 9,数据流变成:

1, 5, 2, 8, 9

你要返回第 3 大的元素是 5。

假如再调用 add 函数增加一个数字 0,数据流变成:

1, 5, 2, 8, 9, 0

这时你要返回的第 3 大元素仍然是 5。

代码

public class AlgoCasts {

  public class KthLargestElementInStream {

    private Queue<Integer> minHeap = new PriorityQueue<>();
    private int k;

    // Time: O(n*log(k))
    public KthLargestElementInStream(int k, int[] nums) {
      this.k = k;
      for (int num: nums) add(num);
    }

    // Time: O(log(k))
    public int add(int val) {
      if (minHeap.size() < k) {
        minHeap.add(val);
      } else if (val > minHeap.peek()) {
        minHeap.poll();
        minHeap.add(val);
      }
      return minHeap.peek();
    }
  }

}

 上一篇
最长回文串的长度 最长回文串的长度
最长回文串的长度问题 这个题目说的是,给你一个包含大小写英文字母的字符串,你要用这些字母构建一个最长的回文字符串,并返回它的长度。 比如说,给你的字符串 s 是: aaabccdd 你能用它构建的回文串的最大长度是 7,因此你要返回的就
2018-12-09
下一篇 
寻找天际线 寻找天际线
寻找天际线问题 这个题目说的是,给你一组矩形表示的楼房,它们的底边在同一水平线上,并且楼房之间可以相邻,也可以重叠。你要找到这组楼房的轮廓线或者叫天际线,并返回这个轮廓线的关键点。 代码 public class AlgoCasts {
2018-12-09
  目录