/ Vijos / 讨论 / 第k大 /

题意不理解

题目要求的不是求**第k大**的数么
这样的话样例600,600,350,420,380,
第1大的数是600;
第2大的数不应该是420么?
第3大就应该是380才对0.0
所以感觉快排完以后应该有一段比较
i:=n;
temp:=score[i];
sum:=1;
repeat
dec(i);
if score[i]<>temp then begin inc(sum); temp:=score[i]; end;
until (i=1) or (sum=k);
writeln(temp);
而不应该只是**简单的** writeln(score[n-k+1]);

3 条评论

  • @ 2016-08-27 09:02:45

    两个600都是第一名,那么420就是第三名了

  • @ 2015-08-01 09:29:25

    像比赛排名一样
    两个600都是第一
    420就是第三了

  • @ 2015-01-13 18:03:32

    笨,如果这是分数,我拿了420分,我问你,我是第二名?

    同样的道理

    其实我仔细分析了此题

    根本不需要快排,墨守陈规

    冒泡排序每一次执行都可以把一个最大或者最小的数弄到一端,因此可以利用K次数的冒泡就可找到第K大,不需要完整排列出来。而快排如果要优化进入一边递归寻找K位置很麻烦。而且快排本来就写的很麻烦!

    此题可以计数排序,拿空间去换时间,非常超值!

    • @ 2015-01-14 11:58:21

      空间上也是计数排序更优吧。。。。。

    • @ 2015-01-14 16:54:50

      确实是。此题很开放,我当时顺便拿来研究了所有排序方法几乎。对我帮助蛮大的。

    • @ 2015-01-15 19:47:33

      我的目的不在于说排序QAQ只是感觉第k大的话600和600真的一样大啊…

  • 1

信息

ID
1788
难度
5
分类
模拟 点击显示
标签
(无)
递交数
2037
已通过
646
通过率
32%
被复制
3
上传者