heap
USC_ECE
这个作者很懒,什么都没留下…
展开
-
JZ29 最小的K个数
保持堆的大小为K,然后遍历数组中的数字,遍历的时候做如下判断:若目前堆的大小小于K,将当前数字放入堆中; 否则判断当前数字与大根堆堆顶元素的大小关系,如果当前数字比大根堆堆顶还大,这个数就直接跳过; 反之如果当前数字比大根堆堆顶小,先poll掉堆顶,再将该数字放入堆中。import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] in原创 2020-09-07 01:56:56 · 268 阅读 · 0 评论 -
LeetCode 378. Kth Smallest Element in a Sorted Matrix
这道题可以用heap来做,有两种视角:Best First Search: 这种写法每次需要expand右边和下边两个数,同一个数可能会被expand两次。因此需要一个二维数组visited[][]来记录每个数是否已经被expand过了。 class Solution { public int kthSmallest(int[][] matrix, int k) { int rows = matrix.length; int cols = matrix[0]原创 2020-06-29 09:18:43 · 84 阅读 · 0 评论 -
LeetCode 347. Top K Frequent Elements
借助 哈希表 来建立数字和其出现次数的映射,遍历一遍数组统计元素的频率维护一个元素数目为 kk 的最小堆每次都将新的元素与堆顶元素(堆中频率最小的元素)进行比较如果新的元素的频率比堆顶端的元素大,则弹出堆顶端的元素,将新的元素添加进堆中最终,堆中的 kk 个元素即为前 kk 个高频元素class Solution { public int[] topKFrequent(int[] nums, int k) { Map<Integer, Integer> co原创 2020-06-26 06:21:49 · 90 阅读 · 0 评论 -
Leetocde 215. Kth Largest Element in an Array
这是一道让我收获很大的题,解题思路是使用quick select排序。首先选出一个pivot(为了方便,把数组的最后一个元素nums[high] 设置成pivot), 然后扫描整个数组。使用了两个指针: i and j,[low, i) 是小于pivot的元素,[i, j) 是大于pivot的元素,[j, high)是未知探索区域。当扫描完整个数组后,将 nums[i] 和 nums[high] 交换位置,这样 index为 i 的 元素即 pivot 在整个数组的位置已经固定下来,我们数一下pivot从大原创 2020-05-28 14:16:18 · 137 阅读 · 0 评论