zoukankan      html  css  js  c++  java
  • AC dream 1099 瑶瑶的第K大

    题意就是从一个无序的数组中找出第k大的数,由于数据很多,容易TLE,而且数组中的元素很大,用hash会MLE;

    解法一:

    /*

    利用STL库函数:nth_element(start, start+n, end)(头文件是<algorithm>)

    使第n大元素处于第n位置(从0开始,其位置是下标为n的元素),并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后,但不能保证他们是有序的。

    */
    #include <iostream> #include <cstdio> #include <algorithm> #define LL long long #define N 6000020 using namespace std; int a[N]; int main() { int n,k,i; cin>>n>>k; for(i=0; i<n; i++) scanf("%d",&a[i]); nth_element(a,a+n-k+1,a+n); printf("%d ",a[n-k]); return 0; }

    解法二:

    /*

    解法二:

    快排的思想:

    加个优化,快排的时候把比枢轴(用来做被比较的标准数)大于等于的放在前面,小的放后面;

    ***********************优化重点来了**********************

    若是比枢轴大的数的个数比k大,那么只需要递归左边的区域,否则递归右边的区域

    ************************************************************


    */
    #include <iostream> #include <queue> #include <cstdio> #include <algorithm> #define LL long long #define N 6000020 using namespace std; int a[N],n,k; int mysort(int left,int right) { int l=left,r=right; if(l<r) { int x=a[l]; while(l<r) { while( l<r && a[r]<x) r--; if(l<r) { a[l]=a[r]; l++; } while( l<r && a[l]>=x) l++; if(l<r) { a[r]=a[l]; r--; } } a[l]=x; if(l==k) return l; if(l>k)/* 此处的优化 */ mysort(left,l-1); else mysort(l+1,right); } } int main() { int i; cin>>n>>k; for(i=1; i<=n; i++) scanf("%d",&a[i]); mysort(1,n); printf("%d ",a[k]); return 0; }
  • 相关阅读:
    使用Charles对iPhone进行Http(s)请求拦截(抓包)
    pip 安装 和 卸载 django
    python2.7.5 安装pip
    (Git 学习)Git SSH Key 创建步骤
    git学习四:eclipse使用git提交项目
    我们为什么要使用List和Set(List,Set详解)
    List、Set、Map的区别
    type=hidden
    测试业务分析
    USACO 3.2 kimbits DP
  • 原文地址:https://www.cnblogs.com/yu0111/p/5452021.html
Copyright © 2011-2022 走看看