堆 标签

LeetCode-347-前K个高频的元素

  |   0 评论   |   0 浏览

题目 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。   示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], k = 1 输出: [1] 解法 利用hash表记录每个元素出现的次数,维护一个k大的优先队列, 优先队列中维护每个元素及出现次数,根据出现次数排序,取前K个即可。 public int[] topKFrequent(int[] nums, int k) { Map<Integer, Integer> countMap = new HashMap<>(); for(int num : nums) { countMap.put(num, countMap.getOrDefault(num, 0) + 1); } PriorityQueue<int []> queue = new PriorityQueue<>(new Comparator<int []>() { public int co....

LeetCode-215-数组中的第K个最大元素

  |   0 评论   |   0 浏览

题目描述 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 解题 排序后取第k大值 public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length - k]; } 利用堆排序 public int findKthLargest(int[] nums, int k) { PriorityQueue<Integer> queue = new PriorityQueue<>(); for(int i=0; i<nums.length; i++) { queue.add(nums[i]); if (queue.size() > k) { queue.poll(); } } return queu....