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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ue4安装插件_ue4 软引用

    ue4安装插件_ue4 软引用原创文章,转载请注明出处。本文介绍两个知识点Plugin/Module插件和模块的联系区别,同时介绍插件和我们的Source中创建多模块。**一、Plugin/Module插件和模块的联系区别**1>一个插件至少有一个模块2>一般插件都是做底层做通用设计的,而模块做的负责的我理解为逻辑ProjectName.Build.cs //主要管理的是链接,dll的链接ProjectName.Target.cs //管理的是编译,加上才会编译你的Module,如果你是run

    2022年10月4日
  • python中sqrt函数用法_sqrt是什么函数[通俗易懂]

    python中sqrt函数用法_sqrt是什么函数[通俗易懂]sqrt是什么函数?sqrt()是用于计算数字x的平方根的函数。语法以下是sqrt()方法的语法:importmathmath.sqrt(x)注意:sqrt()是不能直接访问的,需要导入math模块,通过静态对象调用该方法。参数x–数值表达式。返回值返回数字x的平方根。实例以下展示了使用sqrt()方法的实例:#!/usr/bin/pythonimportmath#…

    2022年5月4日
  • 激光测距传感器原理与应用介绍

    激光测距传感器原理与应用介绍激光,英文名称为LightAmplificationbyStimulatedEmissionofRadiation(简称LASER),意思为原子受激辐射的光,故称激光,激光的产生原理,是原子中的电子吸收能量后从低能级跃迁到高能级,再从高能级回落到低能级的时候,所释放的能量以光子的形式放出,被引诱(激发)出来的光子束(激光)。激光与普通光源相比,具有单色性、高亮度、方向性等优势,被广泛应用于工业生产和科研实验等各个领域,激光测距便是其中应用较为广泛的一项技术。1.激光测距技术的特点激光

    2022年5月29日
  • 图像尺度空间理论_16位灰度图像

    图像尺度空间理论_16位灰度图像《SIFT原理与源码分析》系列文章索引:http://blog.csdn.net/xiaowei_cqu/article/details/8069548尺度空间理论自然界中的物体随着观测尺度不同有不同的表现形态。例如我们形容建筑物用“米”,观测分子、原子等用“纳米”。更形象的例子比如Google地图,滑动鼠标轮可以改变观测地图的尺度,看到的地图绘制也不同;还有电影中的拉

    2022年10月9日
  • JSPJavaBean组件(动作标签)[通俗易懂]

    JSPJavaBean组件(动作标签)[通俗易懂]什么是JavaBean组件JavaBeans组件是具有以下功能的Java类:一个无参构造函数。(Ano-argumentconstructor.)定义属性的访问器和修改器(getter和setter方法)(Propertiesdefinedwithaccessorsandmutators(getterandsettermethod).)类不得定义任何公共实例变量。该类必须实现java.io.Serializable接口。javaBean的意义javaBean作为数据

    2022年7月27日
  • 提高网站页面加载速度的方法

    提高网站页面加载速度的方法

    2021年9月23日

发表回复

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

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