2201: 第k大元素

[命题人 : yancheng]

时间限制 : 1.000 sec  内存限制 : 128 MB

提交

解决: 156提交量: 1038统计

题目描述

输入一个整数数组,请求出该数组的第k大元素。要求时间复杂度为O(n)。

输入

每组输入包括两行,第一行为k值;第二行为一个整数数组,两个数字之间用空格隔开。数组中元素个数小于1000。

输出

输出第k大元素的值,每个结果占一行

样例输入 Copy

2
3 2 1 5 6 4

样例输出 Copy

5

基于随机化快排的思想,如果对随机化快速排序不太懂了可以看我这篇文章

#include<bits/stdc++.h>
using namespace std;int a[1005];
void solve(int low,int high,int k){int poivt=rand()%(high-low+1)+low;swap(a[low],a[poivt]);int count=1,pos=low;for(int i=low+1;i<=high;i++){if(a[i]>a[low]){count++;pos++;swap(a[i],a[pos]);}}swap(a[low],a[pos]);if(k<count)solve(low,pos-1,k);else if(k>count)solve(pos+1,high,k-count);else {cout<<a[pos]<<endl;return;}
}int main(){int k,m;cin>>k;char c='t';int n=0;while (cin >> m){a[n++] = m;if (cin.get() == '\n')//判断回车是回车则结束输入{break;}}solve(0,n-1,k);return 0;
}

法二:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;
const int N = 1e7 + 5;
int a[N];
int main()
{int k,m;while(cin>>k){int n=0;char c='t';while (cin >> m){a[n++] = m;if (cin.get() == '\n')//判断回车是回车则结束输入{break;}}for(int l = 0 , r = n-1; l <= r; ){int i = l, j = r;int temp = a[l];while(i < j){while(i < j && a[j] <= temp) j--; a[i] = a[j];while(i < j && a[i] >= temp) i++; a[j] = a[i];}a[i] = temp;if(i == k-1){printf("%d\n", a[k-1]); break;}else if(k-1 > i)l = i + 1;else if(k-1 < i)r = i - 1;}}return 0;
}

想要点流量真难,非得1500字...。。。水一下字数。。逍遥游

北冥有鱼,其名为鲲。鲲之大,不知其几千里也;化而为鸟,其名为鹏。鹏之背,不知其几千里也;怒而飞,其翼若垂天之云。是鸟也,海运则将徙于南冥。南冥者,天池也。《齐谐》者,志怪者也。《谐》之言曰:“鹏之徙于南冥也,水击三千里,抟扶摇而上者九万里,去以六月息者也。”野马也,尘埃也,生物之以息相吹也。天之苍苍,其正色邪?其远而无所至极邪?其视下也,亦若是则已矣。且夫水之积也不厚,则其负大舟也无力。覆杯水于坳堂之上,则芥为之舟;置杯焉则胶,水浅而舟大也。风之积也不厚,则其负大翼也无力。故九万里,则风斯在下矣,而后乃今培风;背负青天,而莫之夭阏者,而后乃今将图南。蜩与学鸠笑之曰:“我决起而飞,抢榆枋而止,时则不至,而控于地而已矣,奚以之九万里而南为?”适莽苍者,三餐而反,腹犹果然;适百里者,宿舂粮;适千里者,三月聚粮。之二虫又何知!小知不及大知,小年不及大年。奚以知其然也?朝菌不知晦朔,蟪蛄不知春秋,此小年也。楚之南有冥灵者,以五百岁为春,五百岁为秋;上古有大椿者,以八千岁为春,八千岁为秋。此大年也。而彭祖乃今以久特闻,众人匹之,不亦悲乎?

  汤之问棘也是已:“穷发之北,有冥海者,天池也。有鱼焉,其广数千里,未有知其修者,其名为鲲。有鸟焉,其名为鹏,背若泰山,翼若垂天之云;抟扶摇羊角而上者九万里,绝云气,负青天,然后图南,且适南冥也。斥鷃笑之曰:‘彼且奚适也?我腾跃而上,不过数仞而下,翱翔蓬蒿之间,此亦飞之至也。而彼且奚适也?’”此小大之辩也。

  故夫知效一官、行比一乡、德合一君、而征一国者,其自视也,亦若此矣。而宋荣子犹然笑之。且举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世,未数数然也。虽然,犹有未树也。夫列子御风而行,泠然善也,旬有五日而后反。彼于致福者,未数数然也。此虽免乎行,犹有所待者也。若夫乘天地之正,而御六气之辩,以游无穷者,彼且恶乎待哉?故曰:至人无己,神人无功,圣人无名。

  尧让天下于许由,曰:“日月出矣,而爝火不息;其于光也,不亦难乎?时雨降矣,而犹浸灌;其于泽也,不亦劳乎?夫子立而天下治,而我犹尸之;吾自视缺然,请致天下。”许由曰:“子治天下,天下既已治也;而我犹代子,吾将为名乎?名者,实之宾也;吾将为宾乎?鹪鹩巢于深林,不过一枝;偃鼠饮河,不过满腹。归休乎君,予无所用天下为!庖人虽不治庖,尸祝不越樽俎而代之矣!”

  肩吾问于连叔曰:“吾闻言于接舆,大而无当,往而不反。吾惊怖其言。犹河汉而无极也;大有径庭,不近人情焉。”连叔曰:“其言谓何哉?”曰:“藐姑射之山,有神人居焉。肌肤若冰雪,淖约若处子,不食五谷,吸风饮露,乘云气,御飞龙,而游乎四海之外;其神凝,使物不疵疠而年谷熟。吾以是狂而不信也。”连叔曰:“然。瞽者无以与乎文章之观,聋者无以与乎钟鼓之声。岂唯形骸有聋盲哉?夫知亦有之!是其言也,犹时女也。之人也,之德也,将旁礴万物以为一,世蕲乎乱,孰弊弊焉以天下为事!之人也,物莫之伤:大浸稽天而不溺,大旱金石流,土山焦而不热。是其尘垢秕糠将犹陶铸尧舜者也,孰肯以物为事?”宋人资章甫而适诸越,越人断发文身,无所用之。尧治天下之民,平海内之政,往见四子藐姑射之山,汾水之阳,窅然丧其天下焉。

  惠子谓庄子曰:“魏王贻我大瓠之种,我树之成,而实五石。以盛水浆,其坚不能自举也。剖之以为瓢,则瓠落无所容。非不呺然大也,吾为其无用而掊之。”庄子曰:“夫子固拙于用大矣。宋人有善为不皲手之药者,世世以洴澼絖为事。客闻之,请买其方百金。聚族而谋曰:‘我世世为洴澼絖,不过数金,今一朝而鬻技百金,请与之。’客得之,以说吴王。越有难,吴王使之将,冬,与越人水战,大败越人。裂地而封之。能不皲手一也,或以封,或不免于洴澼絖,则所用之异也。今子有五石之瓠,何不虑以为大樽,而浮乎江湖,而忧其瓠落无所容?则夫子犹有蓬之心也夫!”

  惠子谓庄子曰:“吾有大树,人谓之樗。其大本拥肿而不中绳墨,其小枝卷曲而不中规矩,立之途,匠者不顾。今子之言大而无用,众所同去也。”庄子曰:“子独不见狸狌乎?卑身而伏,以候敖者;东西跳梁,不辟高下;中于机辟,死于罔罟。今夫斄牛,其大若垂天之云。此能为大矣,而不能执鼠。今子有大树,患其无用,何不树之于无何有之乡,广莫之野,彷徨乎无为其侧,逍遥乎寝卧其下。不夭斤斧,物无害者,无所可用,安所困苦哉!”

第k大元素(时间复杂度为O(n))相关推荐

  1. 【算法】快速选择算法 ( 数组中找第 K 大元素 )

    算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...

  2. 在一个无序的int数组上构建一个最小堆的时间复杂度_漫画:寻找无序数组的第k大元素(修订版)...

    ----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第二大的元素是20,第三大的元 ...

  3. 堆实战(动态数据流求top k大元素,动态数据流求中位数)

    动态数据集合中求top k大元素 第1大,第2大 ...第k大 k是这群体里最小的所以要建立个小顶堆 只需要维护一个大小为k的小顶堆 即可当来的元素(newCome)> 堆顶元素(smallTo ...

  4. 数组中的元素赋值给元素_漫画:寻找无序数组的第k大元素

    本期封面作者:泰勒太乐 -----  第二天  ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第 ...

  5. 如何寻找无序数组中的第K大元素?

    如何寻找无序数组中的第K大元素? 有这样一个算法题:有一个无序数组,要求找出数组中的第K大元素.比如给定的无序数组如下所示: 如果k=6,也就是要寻找第6大的元素,很显然,数组中第一大元素是24,第二 ...

  6. 从当前元素继续寻找_云漫圈 | 寻找无序数组的第k大元素

    戳蓝字"CSDN云计算"关注我们哦! 作者:小灰 来源:程序员小灰 本期封面作者:泰勒太乐 -----  第二天  ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k ...

  7. 12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?

    算法对比: 算法 时间复杂度 适合场景 冒泡排序.插入排序.选择排序 O(n2) 小规模数据 归并排序.快速排序 O(nlogn) 大规模数据 归并排序和快速排序都用到了分治思想,非常巧妙.我们可以借 ...

  8. 云漫圈 | 寻找无序数组的第k大元素

    戳蓝字"CSDN云计算"关注我们哦! 作者:小灰 来源:程序员小灰 本期封面作者:泰勒太乐 -----  第二天  ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k ...

  9. 遍历数组是什么意思_漫画:寻找无序数组的第k大元素(修订版)

    ----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第二大的元素是20,第三大的元 ...

最新文章

  1. 三、概念数据模型CDM(Conceptual Database Model )
  2. 《Spring1之第五次站立会议》
  3. 云计算革命对国际关系的影响
  4. javascript 手机号间隔显示 123 4567 8910
  5. camel in action
  6. Java技巧:创建监视友好的ExecutorService
  7. 《Drupal实战》——3.3 使用Views创建列表
  8. CSDN又力推一优秀开源项目jeecg,跨时代重构精华版发布
  9. java 非法线程_JVM中的线程行为
  10. Python面向对象之结构与成员
  11. python之模块的导入和用户的交互格式化输出
  12. xml文件和DataTable之间相互转换
  13. JavaScript 小白手册
  14. python实现推广小项目
  15. 戴尔Precision工作站 为元宇宙打造稳定高效创作基石
  16. 我跟OpenStack 1-8年,从ABC到HI、到KO
  17. Jmeter的使用(一)
  18. 如何在linux上使用QQ(在终端上使用qq) mojo-qq
  19. 【Convex Optimization (by Boyd) 学习笔记】Chapter 2 - Convex sets(1) 仿射集凸集
  20. JavaScript Web API第五天

热门文章

  1. 准确率,召回率,mAP,ROC,AUC,特异性,敏感性,假阴性,假阳性
  2. pandas 取excel 中的某一列_干货Python Pandas 做数据分析之玩转 Excel 报表分析
  3. 朋少教你合理进行内部链接优化布局
  4. javascript高级一
  5. App移动应用测试点总结
  6. iOS WIFI 相关
  7. ARM Linux控制CDS5516
  8. 从C到B,20岁的腾讯正在经历一场“生死”腾挪
  9. wifi 中间人攻击_公共wifi下的中间人攻击
  10. 如有问题,请及时联系 || 如有不足,请批评指出,一定会虚心改正 || 如有好的意见 ,欢迎下面留言