力扣刷题之堆
迪恩_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 · 91 阅读 · 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 · 136 阅读 · 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 · 80 阅读 · 0 评论