zoukankan      html  css  js  c++  java
  • (分治)7617:输出前k大的数

    描述 
    给定一个数组,统计前k大的数并且把这k个数从大到小输出。

    输入 
    第一行包含一个整数n,表示数组的大小。n < 100000。 
    第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。 
    第三行包含一个整数k。k < n。

    输出 
    从大到小输出前k大的数,每个数一行。

    样例输入 
    10 
    4 5 6 9 8 7 1 2 3 0 
    5

    样例输出 




    5

    我の思考 
    这个题看起来不难,数字比较大,就是希望我们在时间上能少一点,然后我们就去避免把去排序所有的数字。我们就假设这个k值,分成大于k的和小于k的。如果我们要输出的k比排序后得到的大的部分的数组相等或者要小,我们就排序这里的。如果还欠了数字,我们就把剩下的小数组里面取出排在前n-k个的。

    我の代码

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int x[100005];
    int b[100005];
    int c[100005];
    int j=0;
    int m=0;
    bool cmp(int one,int two){
        return one>two;
    }
    
    void func(int* a,int k,int y){
        sort(a,a+y,cmp);
        for(int n=0;n<k;n++){
            cout<<a[n]<<endl;
        }
        if(k-1<=y){
            return;
        }
    
        if(k-1>y){
            func(b,k-y,j);
        }
    }
    
    int main()
    {
    
        int n;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>x[i];
        }
    
        int k;
        cin>>k;
    
        for(int i=0;i<n;i++){
            if(x[i]<k){
                b[j]=x[i];
                j++;
            }else{
                c[m]=x[i];
                m++;
            }
        }
    
        func(c,k,m);
        return 0;
    }

    我の小结 
    其实之前还不熟悉sort函数的用法还有头文件QAQ,然后发现自己写的代码还是有点臃肿。

  • 相关阅读:
    红队核心工具介绍
    cms漏洞总结(二)
    cms漏洞总结(二)
    cms漏洞总结(二)
    cms漏洞总结(二)
    cms漏洞总结(二)
    cms漏洞总结(二)
    cms漏洞总结 (一)
    好看的樱花落特效
    SELinux 案例 1
  • 原文地址:https://www.cnblogs.com/rimochiko/p/7486958.html
Copyright © 2011-2022 走看看