Description
给定 n(1 <= n <= 10000000) 个正整数(<= 2147483647),找出其中的第K(1 <= K <= 10)大数。
Input
第一行,两个整数n, K,第二行n个整数
Output
第K大数
正解
#include <stdio.h>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
bool com(int x,int y);
int n, k, tem;
scanf("%d %d", &n, &k);
int a[10] = {0};
for(int i = 0;i < n;i ++)
{
scanf("%d", &tem);
if(tem > a[9])
{
a[9] = tem;
sort(a,a + 10,com);
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
bool com(int x,int y);
int n, k, tem;
scanf("%d %d", &n, &k);
int a[10] = {0};
for(int i = 0;i < n;i ++)
{
scanf("%d", &tem);
if(tem > a[9])
{
a[9] = tem;
sort(a,a + 10,com);
}
}
printf("%d", a[k - 1]);
}
printf("%d", a[k - 1]);
return 0;
}
bool com(int x,int y)
{
bool com(int x,int y)
{
return x>y;
}
这个题容易出的错误是
Memory Limit Exceeded和Time Limit Exceeded究其原因在于题意中给的n的最大个数是10000000。
针对这么大的数,如果开一个那么大的数组,会出现Memory Limit Exceeded。在数组中再用sort排序则会超时。
比较合适的做法,每次输入不是输入到数组中,而是输入到一个暂时变量里,每次输入就进行比较,这样速度会变快。