求n个数中的最大或最小k个数】的更多相关文章

//求n个数中的最小k个数        public static void TestMin(int k, int n)        {            Random rd = new Random();            int[] myArray = new int[n];            int[] newArray = new int[k]; for (int i = 0; i < n; i++)            {                // rand…
最小K个数之和 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 输入n个整数,输出其中最小的K个数之和.例如输入4,5,1,1,6,2,7,3,3这9个数字,当k=4,则输出最小的4个数之和为7(1,1,2,3).   输入 测试样例组数不超过10每个测试案例包括2行:第一行为2个整数n,k(1<=k<=n<=100000)第二行包含n个整数,每个整数的范围为[1~2000] 输出 对应每个测试案例,输出最小的k个数之和. 样例输入 8 4 5 2 1…
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些. 先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个.建堆时间复杂度是O(mlogm),算法的时间复杂度为O(nmlogm)(n为10亿,m为10000). 优化的方法:可以把…
题目 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思考 方法0: 直接排序然后返回前k个,最好的时间复杂度为 O(nlog(n)) 方法1: 快排的变种,时间复杂度 O(n),缺点:原址,需要把所有数都 load 到内存中 方法2: 利用最大堆作为辅助,时间复杂度 O(n*lg(k)),适用于处理数据量很大的情况. code #include <iostream> #include <vector> #…
描述 输入n个整数,输出其中最小的K个数之和.例如输入4,5,1,1,6,2,7,3,3这9个数字,当k=4,则输出最小的4个数之和为7(1,1,2,3). 输入 测试样例组数不超过10 每个测试案例包括2行: 第一行为2个整数n,k(1<=k<=n<=100000) 第二行包含n个整数,每个整数的范围为[1~2000] 输出 对应每个测试案例,输出最小的k个数之和. 样例输入 8 4 5 2 1 3 8 1 9 3 样例输出 7 #include <stdio.h> #in…
题目 题目:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 解析 思路1 这一题应用堆排序算法复杂度只有O(nlog k),堆是完全二叉树的一种,最大堆就是最上面的数是最大的该方法基于二叉树或者堆来实现,首先把数组前k个数字构建一个最大堆,然后从第k+1个数字开始遍历数组,如果遍历到的元素小于堆顶的数字,那么久将换两个数字,重新构造堆,继续遍历,最后剩下的堆就是最小的k个数,时间复杂度O(nlog k). 思路2 排序…
题目 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 收获 优先队列实现 (n1,n2)->n2-n1是大顶堆 代码 class Solution { public int[] getLeastNumbers(int[] arr, int k) { PriorityQueue<Integer> h = new PriorityQueue<Integer>((n1,n2)->n2-n…
Description 给出一串数字,这串数字由 n 个数 ai 组成,找出未出现在这串数字中的最小正整数 Input 输入第一行为一个正整数 n (1 <= n <= 1000) 第二行为 n 个正整数 ai ( 1 <= ai <= 1000000000) Output 输出没有出现在这 n 个正整数中的最小的正整数 Sample Input 5 2 4 3 5 151 100 101 102 103 Sample Output 62 思路 因为n的大小为1000,所以没有出现…
包含了Partition函数的多种用法 以及大顶堆操作 /************************************************************************* > File Name: 28_KLeastNumbers.cpp > Author: Juntaran > Mail: JuntaranMail@gmail.com > Created Time: 2016年08月31日 星期三 19时45分41秒 **************…
题目描述:输入n个整数,输出其中最小的k个元素. 例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4. 思路1:最容易想到的方法:先对这个序列从小到大排序,然后输出前面的最小的k个数即可.如果选择快速排序法来进行排序,则时间复杂度:O(n*logn) 思路2:在思路1的基础上更进一步想想,题目并没有要求要查找的k个数,甚至后n-k个数是有序的,既然如此, 咱们又何必对所有的n个数都进行排序列?如此,我们能想打的一个方法是:遍历n个数,先把最先遍历到得k个数存入大…