1029 Median (25分)

 

这题...直接用sort函数排个序就好了啊...其他博客说什么会爆内存,没有吧。我这代码不管内存还是用时表现都挺好的...注意点有两个,第一序列的个数分为奇数和偶数,两种情况下的中位数位置要注意。第二,序列数据类型用long long。

ps:这题原来的内存限制是1.5MB,那我的代码的确是会超过这个限制。不过现在这题限制是64MB,所以很容易就过了。用柳神的代码跑了一下,虽然内存比我小了一半,但第8个测试点还是超过1.5MB啊...也用其他人的代码跑了,不用sort()函数的代码的内存其实也没好到哪里去...最后附上内存表现最好的代码,有空学习一下。

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<vector>
 4 #include<algorithm>
 5 using namespace std; 
 6 int main()
 7 {  
 8    int n;
 9    long long num;
10    int sum=0;
11    vector<long long> A;
12    for(int i=0;i<2;i++){
13        scanf("%d",&n);
14        sum+=n;
15        for(int j=0;j<n;j++){
16            scanf("%lld",&num);
17            A.push_back(num);
18     }
19    }
20    sort(A.begin(),A.end());
21    if(sum%2==0)
22      cout<<A[sum/2-1];
23     else
24       cout<<A[sum/2];    
25   return 0;
26 }

 别人写的,所有测试点均未超过1.5MB:

 1 #include<stdio.h>
 2  
 3 int l1[200000];
 4  
 5 int main()
 6 {
 7     int n1, n2;
 8     scanf("%d", &n1);
 9     for (int i = 0; i < n1; i++)
10     {
11         scanf("%d", &l1[i]);
12     }
13     scanf("%d", &n2);
14     int median = (float)(n1 + n2) / 2.0 + 0.5;
15     int ans;
16     int i = 0, j = 0;
17     int l2;
18     scanf("%d", &l2);
19     for (int k = 0; k < median; k++)
20     {
21         if (i == n1)
22         {
23             ans = l2;
24             for (; j <= median - n1 - 2; j++)
25             {
26                 scanf("%d", &ans);
27             }
28             break;
29         }
30         if (j == n2)
31         {
32             ans = l1[i + median - n2 - 1];
33             break;
34         }
35         if (l1[i] <= l2)
36         {
37             i++;
38             if (k == median - 1)
39             {
40                 ans = l1[i - 1];
41                 break;
42             }
43         }
44         else
45         {
46             j++;
47             if (k == median - 1)
48             {
49                 ans = l2;
50                 break;
51             }
52             if (j < n2)
53             {
54                 scanf("%d", &l2);
55             }
56         }
57     }
58     printf("%d\n", ans);
59     return 0;
60 }

 

来源:https://blog.csdn.net/qq_39115541/article/details/99680944?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

posted @ 2020-03-24 16:50  wsshub  阅读(193)  评论(0)    收藏  举报