最小的k个数

原创 2015年07月09日 16:57:14


void GetLeastNumbers(int* input, int n, int* output, int k)
{
if (input == NULL || output == NULL || k > n || n <= 0 || k <= 0)
return;
int start = 0;
int end = n - 1;
int index = Partition(input, n, start, end);
while (index != k - 1)
{
if (index > k - 1)
{
end = index - 1;
index = Partition(input, n, start, end);
}
else
{
start = index + 1;
index = Partition(input, n, start, end);
}
}
for (int i = 0; i < k; ++i)
output[i] = input[i];
}



typedef multiset<int, greater<int>>  intSet;
typedef multiset<int, greater<int>>::iterator setIterator;
void GetLeastNumbers(const vector<int>& data, intSet& leastNumbers, int k)
{
leastNumbers.clear();
if (k < 1 || data.size() < k)
return;
vector<int>::const_iterator iter = data.begin();
for (; iter != data.end(); ++iter)
{
if ((leastNumbers.size()) < k)
leastNumbers.insert(*iter);
else
{
setIterator iterGreatest = leastNumbers.begin();
if (*iter < *(leastNumbers.begin()))
{
leastNumbers.erase(iterGreatest);
leastNumbers.insert(*iter);
}
}
}
}




【剑指Offer学习】【面试题30:最小的k个数】

题目: 输入n个整数,找出其中最小的k个数。 解题思路: 解法一:O(n)时间算法,只有可以修改输入数组时可用。可以基于Partition函数来解决这个问题。 解法二: O(nlogk)的算法,精剧...

基于partition——最小的K个数、数组中出现次数超过一半的数字

题目一:最小的K个数 解法一:基于partition,O(N)的算法,并且会修改输入的数组,不适用于海量数据,因为数据可能不能一次性读入内存; public void swap(i...

求最小的K个数 O(N) 一种实现-基于堆排序

题目要求:给出一组数(有n个),求出前k个最小的数:形式化描述如下:给出一组数:c1,c2,...,Cn的无序排列A,设c1算法思想:用给定排列的前k个数建最大堆,对于后面的n-k个数,逐个进行判断,...
  • jim_wei
  • jim_wei
  • 2011年04月19日 16:44
  • 1234

Top K问题

Top K问题在数据分析中非常普遍的一个问题(在面试中也经常被问到),比如: 从20亿个数字的文本中,找出最大的前100个。 解决Top K问题有两种思路, 最直观:小顶堆(大顶堆 -> 最小1...

剑指Offer—编程题30(最小的k个数)

题目: 输入n个整数,找出其中最小的k个数。 例子说明: 例如输入4 、5 、1、6、2、7、3 、8 这8 个数字,则最小的4 个数字是1 、2、3 、4 解题思路: 解法一:O(n)时间...

《剑指offer》:[30]最小的K个数问题

题目:输入N个整数,找出其中最小的k个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 方案一:就是先对数组进行排序,然后输出前K个数字。时间复杂度为O(N*l...
  • gogoky
  • gogoky
  • 2016年06月09日 21:51
  • 527

寻找数组中最小的k个数(快排和堆排)

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 思路1:利用快排的思想,寻找第k个位置上正确的数,k位置...

用PriorityQueue解决选择最小的K个数问题

Java 中的PriorityQueue是一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法...

找出无序数组中的最小的k个数(利用大根堆)

package com.itheima.paixu; import java.util.Scanner; /** * 找到无序数组中最小的k个数 * @author Dell * */ p...
  • wwe4023
  • wwe4023
  • 2017年07月15日 11:08
  • 387

26.最小的K个数:快排应用

最小的K个数 参与人数:3182时间限制:1秒空间限制:32768K 本题知识点: 数组  算法知识视频讲解 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最小的k个数
举报原因:
原因补充:

(最多只允许输入30个字)