本文共 1031 字,大约阅读时间需要 3 分钟。
题目:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]
示例 2:
输入: nums = [1], k = 1 输出: [1]
题解:用一个优先级队列来进行,hashmap存储key和value,根据value的值来比较
package com.lcz.leetcode;/** * 前K个高频元素 * @author LvChaoZhang * */import java.util.*;public class Leetcode347 { public int[] topKFrequent(int[] nums,int k) { HashMaphashMap= new HashMap<>(); for (int i = 0; i < nums.length; i++) { if(hashMap.containsKey(nums[i])) { hashMap.put(nums[i], hashMap.get(nums[i])+1); }else { hashMap.put(nums[i],1); } } // 优先级队列 小顶堆 PriorityQueue queue = new PriorityQueue (k,(a,b)->Integer.compare(hashMap.get(a), hashMap.get(b))); // 对HashMap的key进行遍历 for(int key:hashMap.keySet()) { if(k>queue.size()) { queue.offer(key); }else if(hashMap.get(key)>hashMap.get(queue.peek())) { queue.poll(); queue.offer(key); } } int[] res = new int[k]; int index = 0; while(!queue.isEmpty()) { res[index++] = queue.poll(); } return res; }}
转载地址:http://wzwdf.baihongyu.com/