
lwjwj131412-05 14:18
等级
3楼
难道需要将N个元素完全排序成功后才完吗?
lintcode在数组中找到第k大的元素(快速排序)
csucdl12-05 14:29
等级
4楼
用划分partition可以实现,这也是选择排序的实现思想
//在数组A[left],...A[right]中找第k小元素s并把它放在位置left+k;
voidSelect(intA[],intleft,intright,intk)
{
intm=0;
intr=0;
intj=0;
m=left;
r=right+1;
while(true)
{
j=r;
j=Partition(A,m,j);//返回j,它使得A[j]是第j小的值
if(k==(j-left))
{
return;
}
elseif(k<(j-left))
{
r=j;
}
else
{
m=j+1;
}
}
return;
}
intPartition(intA[],intleft,intright)
{
inti=0;
intk=0;
intv=0;
i=left;
k=right;
v=A[left];
while(true)
{
do
{
i++;
}while(A[i]<v&&i<right);
do
{
k--;

}while(A[k]>v&&k>left);
if(i<k)
{
InterChange(A[i],A[k]);//交换
}
else
{
break;
}
}
A[left]=A[k];
A[k]=v;
returnk;
}
select的平均计算时间O(n).
当然还有一种最坏情况下时间为O(n).的select算法
找出二叉搜索树中第k小的元素(Java)
rockefeller812-05 14:30
等级
5楼
如果只想找第K大的元素,则不一定要排序。设置一个指针,和一个计数器,按照遍历所有元素的思路,找到第K个大元素。(具体遍历方法看你要处理的数据有什么样的特点。)
给出一个分治算法来找出n个元素序列中第2大的元素
foxdeng12-05 14:31
等级
6楼
有意思,你不进行排序,怎么知道是第k大?
你跟别人之间不互通年龄,能确定彼此的大小关系吗?
[LeetCode题解]从两个有序数组的并集中寻找第k小元素
cdo12-05 15:09
等级
7楼
快速排序的同时与K值进行比较。
无序序列中O(n)时间复杂度寻找最小(最大)的K个数
sankt12-05 15:20
等级
8楼
堆排序是最快的
用建大堆的思想
查找第K个元素
cunsh12-05 15:20
等级
9楼
如果要在100000000个数中找第2大的元素呢.
排序(下):如何用快排思想在O(n)内查找第K大元素?
sankt12-05 15:21
等级
10楼
堆排序可以快速找出前面k个较大的数,而不用完全排序
java 实现从无序数组中 找出第k大的数, 无序数组充许有重复元素
healer_kx12-05 15:23
等级
11楼
我认为排序是一定的.问题在于如何排序了.
[LeetCode]215 数组第k大的数
Youthllen12-05 19:20
等级
12楼
同意堆排序,但堆排序建初堆要时间。
如果是我,会选择冒泡法,冒泡k次即可,不用全部排序

用priority_queue实现找出数组中前K个大的元素
csucdl12-05 20:14
等级
13楼
同意foxdeng(江洋大刀)的逻辑
只要有大小区别,那么就得通过比较来确定
寻找数组中第k小的数:平均情况下时间复杂度为O(n)的快速选择算法
lovefreex12-05 20:32
等级
14楼
我觉得要根据元素的个数来决定用哪种排序方式,如果个数较大,快速排序应该比较理想
一颗二叉搜索树,找出树中的第k大节点
xili12-06 00:39
等级
15楼
stl的有个算法就是做这个的
在两个有序链表中查找第K大元素。
ahatony12-06 01:05
等级
16楼
RE:csucdl(csucdl)
------------------------
赞成,这题其实是不用完全排序的,使用选择排序的方法能够解决问题
相比排序的O(logn),这种算法的复杂度为大theta(n)(那个希腊字母打不出来,用音代替了)
其实这个问题可以理解为,将要查找的数固定好一个范围之后,就可以抛弃剩下的数了。
利用快排寻找数组中第k个最大元素
henan_lujun12-06 08:26
等级
17楼
此外,sse4指令集还加入了串流式负载指令二叉排序树的建立,能够提升帧缓冲区的读取数据频宽,理论上可获取完整的快取缓存行,即每次读取64bit而非8bit,并可以将其保存在临时缓冲区内,让支持sse4指令集的读取频宽效能提升最高至8倍。[思路点拨]排数问题和站队问题是排列、组合中的两类典型问题,其解决的思路相似,需考虑特殊元素、特殊位置、相邻问题、不相邻问题等的处理方法.[精解详析](1)分步完成:第一步,在4个偶数中取3个,可有c种情况。[思路点拨]排数问题和站队问题是排列、组合中的两类典型问题其解决的思路相似需考虑特殊元素、特殊位置、相邻问题、不相邻问题等的处理方法.[精解详析](1)分步完成:第一步在4个偶数中取3个可有c种情况。
寻找二叉树的第k大节点
foreversoft12-06 12:04
等级
18楼
装入datatable利用select方法里的sort不是蛮好
LintCode笔记(12)——第k大元素
rockefeller812-06 12:36
等级
19楼
楼上的“回复人:foxdeng(江洋大刀)()信誉:100有意思,你不进行排序,怎么知道是第k大?你跟别人之间不互通年龄,能确定彼此的大小关系吗?”
简单举个例子:如果想找第K大的二叉排序树的建立,也来先逐个排序,然后再给出最大的那个元素,是不是效率太低呀?本题的目的只是找到第K大,不需要其后的信息。至于什么样的算法最快,要依据数据的特点来定,可以对数据进行先期的处理,使得具备某种规律,然后再定算法。
java实现通过快速排序来查找数组中第n大的元素
rockefeller812-06 12:38
等级
20楼
上面改一下:“如果想找第1大的......”,原因笔误!
用堆排序实现查找最小的K个元素 java
rockefeller812-06 12:43
等级
21楼
如果数据较少,有限范围,先期数据处理得好,我认为哈希函数处理最快,^_^当然能不能采用哈希函数,还要看数据的特点。
python--查找数组第K大的数
yuanchuang12-06 12:43
等级
22楼
没时间看,Mark
大顶堆,n个数中找最小的k个数
rockefeller812-06 12:49
等级
23楼
再说点,排序与找出第K大的元素是两个完全不同的概念。简单的说,排序需要对数据进行位置或指向的重排,而查找则不需要对元素位置或指向重排。
若干个(大量)数字中找前K大/小的元素--数值型

cyberHunK12-06 13:02
等级
24楼
rockefeller8(洛克菲勒)言之有理!
二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为o(n).但二分查找算法则更优,因为其查找时间为o(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为:。 许多算法,比如排序,查找,要求对容器中的元素进行比较,所以,放入容器的对象所属的类,还应该实现==和 <运算符。 函数对象 算法 stl算法本身是一种函数模版 通过迭代器获得输入数据 通过函数对象对数据进行处理 通过迭代器将结果输出 stl算法是通用的,独立于具体的数据类型、容器类型 stl算法分类 不可变序列算法 可变序列算法 排序和搜索算法 数值算法 * 算 法 不可变序列算法 不可变序列算法 不直接修改所操作的容器内容的算法 用于查找指定元素、比较两个序列是否相等、对元素进行计数等 例: template class inputiterator, class unarypredicate inputiterator find_if inputiterator first, inputiterator last, unarypredicate pred 。
分治法实验-寻找第k小元素
DesertStorm12-06 13:46
等级
25楼
同意sankt(黄景天)的观点,这个问题应该用“类似”“堆排序”的方法。
这个问题最直观的解决是先找最大的,再找第二大,……找到第K大的。(即“选择排序”的一部分)
而选择排序的优化方法就是堆排序,只不过每次建完堆以后,要多做一个数字个数的统计和比较。但无论怎么样,堆的一侧肯定不需要继续排序的,肯定比“选择”要快。
其他所有的排序方法(除了冒泡),都要把所有的数字排序,显然不是最好的。
【算法-快速排序】第k大元素(Kth Largest Element)
Solstice12-06 13:46
等级
26楼
同意csucdl,也可用STL算法nth_element()。
从海量数值中找出最大的N个元素的算法实现
azs12-06 13:51
等级
27楼
楼上的别挺了!
这似乎不是查找问题吧!!!!
除非已经知道了第K元素的值,这才叫查找!
如果你确定了第K元素的值,似乎也就解决了楼主的问题!
楼主,这样理解对不对?
找出N个元素的数组中最大的K个数
DesertStorm12-06 14:03
等级
28楼
恩,应该是堆的方法没错了。
最好的情况下,你选择建堆的基数正好是第K大的数,那么N次比较就搞定。还有什么方法能比这个快??
在N个乱序数字中查找第K大的数字
azs12-06 14:38
等级
29楼
1、取前k个元素排好序,置于一个缓冲区dst[k]内
2、for(i=k;i<n;i++)
{
用src[k]为值在dst[]内二分查找,大于最小值就插入,挤出原来的最小值
保持dst[]内只有k个值
}
3、dst[k-1]即为所求
算法复杂度:
最差情况:O((n-k)*log(k)*k+k*k)
平均情况:自己算吧
由此我们可知,k很重要,因此,如果2k>n时,就应该按第(n-k)小值来查找(挤出大值)
【leetcode】——从两个有序数组中寻找他们并集的第k小元素
azs12-06 14:40
等级
30楼
空间复杂度为k或n-k
线性时间内从一个数组中找出第K个最小的元素
azs12-06 14:55
等级
31楼
有错误,整理一下
1、取前k个元素排好序,置于一个缓冲区dst[k]内

2、for(i=k;i<n;i++)
{
用src[i]为值在dst[]内二分查找,大于最小值就插入,挤出原来的最小值
保持dst[]内只有k个值
}
3、dst[k-1]即为所求
算法复杂度:
最差情况:O((n-k)*log(k)*k+k*k)
平均情况:自己算吧
最好情况:自己算吧
空间复杂度为k
如果2k>n,就按第(n-k)小值方向查找(挤出大值)
令k=n-k;
1、取前k个元素排好序,置于一个缓冲区dst[k]内
2、for(i=k;i<n;i++)
{
用src[i]为值在dst[]内二分查找,小于最大值就插入,挤出原来的最大值
保持dst[]内只有k个值
}
3、dst[0]即为所求
面试题:从n个数中找出第K大的数
DesertStorm12-06 15:04
等级
32楼
azs大侠,
您的算法要搬运数据的次数算了吗?
数组中的第K个最大元素 【LeetCode 排序】
vc_asm12-06 15:13
等级
33楼
憨豆的物防道具升级优先选择(奶白色弹珠+生命值+物防+法抗+法力值),法抗道具升级优先选择(剔透萝卜片=生命值+生命恢复+物防+法抗),恢复道具升级优先选择(反光锡箔纸=生命值+生命恢复+攻击),当然感觉防御还是不够,可以继续出(天牛甲=生命值+物防+法抗),对面法系多可以出那个(荆棘之刺+法抗+攻击+忽略),最后一个可以随意出个攻击或者防御的,建议出攻击,因为之前3-4个道具出完的话,敌人基本已经打不动你了,而且回血还快,打掉的不如回的多undefined。sqlite3_create_collation() 函数用来声明一个排序序列和实现它的比较函数. 比较函数只能用来做文本的比较. etextrep 参数可以取如下的预定义值 sqlite_utf8, sqlite_utf16le, sqlite_utf16be, sqlite_any,用来表示比较函数所处理的文本的编码方式. 同一个自定义的排序规则的同一个比较函数可以有 utf-8, utf-16le 和 utf-16be 等多个编码的版本. sqlite3_create_collation16()和sqlite3_create_collation() 的区别也仅仅在于排序名称的编码是 utf-16 还是 utf-8.。不 懂 得 官 子 的 计 算 方 法 ,就 无 法 判 断 出 每 一 手 棋 的 价 值 ,就 不 可 能 得 出 每 一 手 棋 的 大 小 标 准 ,因 此 , 研 究 并 掌 握 了 官 子 计 算 方 法 后 , 才 能 培 养 出 真 正 的 大 局 观 。
查找无序序列中第i小的元素
vc_asm12-06 15:15
等级
34楼
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我建议:n值小,用选择法选出第n大值比较快,n值大,用选择法选出第(N-n)小值比较快,至于n不大也不小,那么。。。。你们看着办吧,也许修改一下堆排序算法会比较适合,或者修改一下快速排序算法吧,只要你有时间,觉的值的花这个精力
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
解决寻找第K小元素问题——三种不同的算法实现
jordan112-06 16:17
等级
35楼
学习
【算法】在N个乱序数字中查找第K大的数字
codearts12-06 17:46
等级
36楼
>在N个元素中查找第k大的元素,有什么方法最快?
假如只查找一次,想必直接一个一个地找是比较快的,时间复杂度:O(n),排序怎么着也得:o(log2N)
选择问题——选出第K个最大的元素
lxb36512-06 18:33
等级
37楼
这个问题是用快速排序思想解决的典型问题,也就是用递归的办法。
面试题—— 找出一个无序整型数组中第k大的数。
pinelinda12-08 14:47
等级
38楼
用冒泡吧,在排的过程中就找到了,或者根据情况也可以倒着冒
【28】一个无序的序列查找第K大的数
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-108656-1.html
最起码也要先了解该产品的性质