题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 思路 堆排序 收获 用优先队列实现最大最小堆 注意下列代码中优先队列的创建声明,需要自定义比较函数 代码 class Solution { public int findKthLargest(int[] nums, int k) { PriorityQueue<Integer> h = new PriorityQueue<>((n1,n2)->n…
题目: CVTE笔试题https://www.1024do.com/?p=3949 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节. 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个.一个查询串的重复度越高,说明查询它的用户越多,也就是越热门.),请你统计最热门的10个查询串,要求使用的内存不能超过1G.   思路:此题解题步骤可分为两步:1.统计每个“查询串”(下称为query)出现的次数  …
PageRanking 通过: Input degree of link "Flow" model - 流量判断喜好度 传统的方式又是什么呢? Every term在某个doc中的权重(地位). 公共的terms在Query与Doc中对应的的地位(单位化后)直接相乘,然后全部加起来,构成了cosin相似度. Efficient cosine ranking 传统放入堆的模式:n * log(k) 使用Quick Select:n + k * log(k) : "find to…
输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint uiK, int * pOutputArray); 输入参数: unsignedint uiInputNum //输入整数个数 int * pInputArray  //输入整数数组 unsignedint uiK   //需输出uiK个整数 输出参数(指针指向的内存区域保证有效): int * p…
一.题目描述 描述: 输入n个整数,输出其中最小的k个. 输入: 输入 n 和 k 输入一个整数数组 输出: 输出一个整数数组 样例输入: 5 2 1 3 5 7 2 样例输出: 1 2 二.Top K问题 对于 Top K 问题有很多种解法. 解法一:排序 相信很多人会首先想到这种方法,先把数组按升序/降序进行排序,然后输出 K 个最小/最大的数. 常规的排序方法时间复杂度至少是Θ(nlog2n).(快排或堆排序) 可能你会说,我们可以使用线性时间的排序算法.当然可以,但通常它们对输入的数组有…
题目 输入 n 个整数,找出其中最小的 k 个数.例如输入4.5.1.6.2.7.3.8 这8个数字,则最小的4个数字是1.2.3.4. 初窥 这道题最简单的思路莫过于把输入的 n 个整数排序,排序之后位于最前面的 k 个数就是最小的 k 个数.这种思路的时间复杂度是 O(nlogn). 解法一:脱胎于快排的O(n)的算法 如果基于数组的第 k 个数字来调整,使得比第 k 个数字小的所有数字都位于数组的左边,比第 k 个数字大的所有数字都位于数组的右边.这样调整之后,位于数组中左边的 k 个数字…
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 题目 输入 n 个整数,找出其中最小的 k 个数.例如输入4.5.1.6.2.7.3.8 这8个数字,则最小的4个数字是1.2.3.4. 初窥 这道题最简单的思路莫过于把输入的 n 个整数排序,排序之后位于最前面的 k 个数就是最小的 k 个数.这种思路的时间复杂度是 O(nlogn). 解法一:脱胎于快排的O(n)的算法…
// 最小的k个数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <set> #include <vector> #include <queue> using namespace std; // set中默认是从大到小的顺序,即最先取出的是最小值 // 此处为从小到大,最先取出的是最大值 typedef multiset<int,gr…
题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路: 1.排序 把输入的n个整数排序,然后取前k个数: 时间复杂度:O(nlogn) 2.Partition 通过partition找到第k大的数,它的左边就是前k小的数: 时间复杂度:O(n) 3.最大堆 构建k个整数的最大堆数据结构,然后将剩余n-k个整数依次与堆顶比较,大则抛弃,小则删除堆顶并插入,最后的最大堆就是最小的k个整数: 堆是基于二叉树来实现的,因…
public class MinHeap { /* * * Top K个问题,求给定数据中最小的K个数 * * 最小堆解决:堆顶元素为堆中最大元素 * * * */ private int MAX_DATA = 10;//最小10个数 private int[] data;//存储数据 private int len;//当前存储长度,考虑到元素个数可能没有10个,这个时候全部输出 private MinHeap() { data = new int[MAX_DATA]; len=0; } pr…