ACdream 1099 瑶瑶的第K大

ACdream 1099 瑶瑶的第K大

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

瑶瑶的第K大

Time Limit: 10000/5000MS (Java/Others)Memory Limit: 512000/256000KB (Java/Others)

SubmitStatisticNext Problem
Problem Description

一天,萌萌的妹子–瑶瑶(tsyao)非常无聊,就来找你玩。但是你们都不知道玩什么。。。尴尬了一阵子,机智的瑶瑶就提议:“这样吧,你说N个整数xi,然后在任意说一个数字k,我可以高速地说出这些数字里面第 k 大的数字。”

Input


第1行 两个整数N, K以空格隔开;

第2行 有N个整数(可出现相同数字,均为随机生成),相同以空格隔开。

0 < n ≤ 5*10^6 , 0 < k ≤ n

1 ≤ xi ≤ 10^8


Output


输出第 k 大的数字。
Sample Input

5 2
5 4 1 3 1
Sample Output

4
Hint

如2,2,1中三个数字中第一大数字为2,第二大数字也为2,第三大数字为1 。


闲来无聊,静静心,刷刷水题,突然想起快排的实现过程还不懂,于是就找到了这个题,专研了快排,也算懂个所以然了!

只是这个题做得纠结啊,卡超时卡得太紧了,还得优化输入,无奈啊!!


AC代码例如以下:

#include<iostream>
#include<cstring>
#include<cstdio>
#define M 6000010
using namespace std;

int num[M];

int input()
{
    int ans=0;
    char a;
    while((a=getchar())<'0'||a>'9');
    ans=a-'0';
    while((a=getchar())>='0'&&a<='9')
    {
        ans=ans*10+a-'0';
    }
    return ans;
}

int qsort(int l,int r,int k)
{
    if(l==r)
        return num[l];
    int i,j,a;
    a=num[l];i=l;j=r;
    while(i<j)
    {
        while(i<j&&num[j]<=a)
            j--;
        if(i<j)
            num[i++]=num[j];
        while(i<j&&num[i]>=a)
            i++;
        if(i<j)
            num[j--]=num[i];
    }
    num[i]=a;
    if(i==k) return num[i];
    else if(i>k) return qsort(l,i-1,k);
        else return qsort(i+1,r,k);
}


int main()
{
    int i,j;
    int n,k;
    n=input();k=input();
    for(i=1;i<=n;i++)
        num[i]=input();
    int ans=qsort(1,n,k);
    printf("%d\n",ans);
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118702.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2020最新版MySQL数据库面试题(一)

    2020最新版MySQL数据库面试题(一)

    2022年2月14日
    40
  • hdfs解决什么问题_hadoop命令和hdfs命令区别

    hdfs解决什么问题_hadoop命令和hdfs命令区别在已经配置好hadoop的环境下,查看hdfs所有目录如下命令不起作用./bin/hdfsdfs-ls.//应该更改为hdfsdfs-ls/同理查看user/hadoop/input目录内文件情况hdfsdfs-ls/user/hadoop/input上传到指定目录//hdfsdfs-put/本地文件目录hdfs目录//例如hdfsdfs-put/home/hadoop/myLocalFile.txtinput//

    2022年10月4日
    1
  • 红楼品鉴「建议收藏」

    红楼品鉴「建议收藏」红楼梦曹雪芹(1715-1763)案头文学,很多心理活动,心理描写很成功,特别是黛玉,因此在电视剧中黛玉的角色很难演,但是在戏曲中通过唱词比较好表达。本人强推裴效维评注的红楼梦版本,全套三本,评注很详细,有很多诗词的解释。(一)人物关系贾代善娶了金陵史家的小姐(贾母)宁国府人丁稀少,贾敬很早就到寺庙里炼丹求药,将他的爵位世袭给了贾珍。水字辈、代字辈、文字辈、…

    2022年6月8日
    31
  • javaweb-springboot-2-73

    javaweb-springboot-2-73

    2021年5月18日
    131
  • c++迭代器iterator遍历map_iterator迭代器原理

    c++迭代器iterator遍历map_iterator迭代器原理什么是迭代器迭代器是一种可以遍历容器元素的数据类型。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C++更趋向于使用迭代器而不是数组下标操作,因为标准库为每一种标准容器(如vector、map和list等)定义了一种迭代器类型,而只有少数容器(如vector)支持数组下标操作访问容器元素。可以通过迭代器指向你想访问容器的元素地址,通过*x打印出元素值。这和我们所熟知的指针极其类似。C语言有指针,指针用起来十分灵活高效。C++语言有迭代器,迭代器相对于指针而言功能更为丰富。vector,是数

    2025年7月1日
    3
  • mysql之视图、索引

    mysql之视图、索引视图 什么是视图 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变。 视图的作用 定制用户数据,聚焦

    2022年7月22日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号