zoukankan      html  css  js  c++  java
  • LeetCode347:前 K 个高频元素

    题目描述:

    解题思路:

    遇到这种TopK问题,我首先想到的是利用大顶堆或者小顶堆,结合本题中的要求,堆里面存储内容肯定是和元素出现频率有关的,此时,如果存储的是元素频率,那么无法根据频率知道对应的元素,所以堆里面应该存储出现频率前K高的元素。另外在遍历数组时候,需要记录元素出现的频率,为了能够快速得到元素出现的频率,可以利用HashMap,以元素为key,以元素对应的频率为value,将其存储在HashMap里面。具体代码如下:

     1 import java.util.*;
     2 
     3 class Solution {
     4     public int[] topKFrequent(int[] nums, int k) {
     5         int[] ans = new int[k];
     6         int len = nums.length;
     7         if( k > len || len == 0 || k == 0) return ans;
     8         HashMap<Integer, Integer> map = new HashMap<>();
     9         for(int num : nums){
    10             map.put(num, map.getOrDefault(num,0)+1);
    11         }
    12 PriorityQueue<Integer> heap = new PriorityQueue<Integer>((o1,o2)->(map.get(o1) - map.get(o2))); //以元素出现的频率为依据构建大顶堆,将对应的元素存储到堆里面 13 14 for(int key : map.keySet()){ 15 heap.add(key); 16 if(heap.size() > k){ 17 heap.poll(); 18 } 19 } 20 21 int i = 0; 22 while(!heap.isEmpty()){ 23 ans[i] = heap.poll(); 24 i++; 25 } 26 return ans; 27 } 28 }
  • 相关阅读:
    连接数据库,创建表,插入数据,更新数据
    常用的表达式转换
    同构与异构
    Bitmap(一)
    ListView的优化尝试
    Animation初探(二)
    Animation初探(一)
    关于ActionBar的坑
    关于Bitmap的加载(二)
    关于Bitmap的加载(一)
  • 原文地址:https://www.cnblogs.com/zhang-yi/p/12865030.html
Copyright © 2011-2022 走看看