力扣刷题之堆
迪恩_Emma
喜欢看书的Java开发
展开
-
347. 前 K 个高频元素(中等)
思路:小根堆(优先队列)维护前k个元素+哈希表HashMap代码:class Solution { public int[] topKFrequent(int[] nums, int k) { //利于哈希表存储出现的频次 Map<Integer,Integer> map=new HashMap<>(); for(int num:nums){ map.put(num,map.getOrDefault(num,0)+1); } .原创 2021-06-12 20:06:10 · 64 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数(中等)
思路:实际上就是排序,将数组排好序,然后一个个接到StringBuilder中方法一:自定义双边快速排序方法二:重写Arrays.sort()方法,该方法本质也是一个快排方法三:小顶堆(小的在堆顶)代码:方法一:class Solution { public String minNumber(int[] nums) { StringBuilder res=new StringBuilder(); String[] str=new String[num.原创 2021-05-06 21:42:15 · 97 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数(困难)
思路:使用2个优先队列,一个存储较大的一半,另一个存储较小的一半如果是奇数,就返回小顶堆(存储较大一半)的堆顶元素如果是偶数,就返回两堆堆顶元素/2.0的值代码:class MedianFinder { Queue<Integer> A,B; /** initialize your data structure here. */ public MedianFinder() { A=new PriorityQueue<>();//小.原创 2021-05-05 11:08:09 · 54 阅读 · 0 评论