最小的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);
}
}
}
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

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

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

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

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

找出一堆数据中最小的K个数问题

题目:输入n个整数,输出其中最小的k个。 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在...

n 个数中最小的 k 个数

1. 描述 输入 n 个整数,输出其中最小的 k 个。 2. 解法 一般的方法是用选择排序,直到k个最小的数产生。时间复杂度为O(nk),空间复杂度为O(n)。 或者是对这n个数用...

最小的K个数 (冒泡和最小堆)

问题:最小的K个数 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 - 方法一(冒泡排序k趟) 思路:冒泡排...

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

package com.itheima.paixu; import java.util.Scanner; /** * 找到无序数组中最小的k个数 * @author Dell * */ p...

查找n个数中最小的k个元素

/* 求n个数中最小的k个元素 * 用堆排序:时间复杂度为O(nlgk) */ #include /* 求左右叶子、父结点的宏定义 */ #define LEFT(i) ((i) * 2) ...

剑指offer-----面试题30(最小的k个数)

实现思路:         实现思路类似于上一题的求解数组中出现次数超过一半的数字,这道题同样也并没有要求我们将最小的k个数按顺序输出来,因此我们可以借助于快速排序寻找主元的位置的方法来实现,因为主...

面试题30:最小的k个数(未)

面试题30:最小的k个数题目描述: 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。题目分析: 找出最小的k个数,直观的解...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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