PAT 1029. Median

尼玛,数组偶数个数的时候取中位数是取中间两者中的前者,还tmd一直再算平均,卧槽

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>

using namespace std;

int min(int a, int b) {
    return a<b? a:b;
}

int main() {

    int na, nb;

    scanf("%d", &na);
    vector<int> a(na);
    
    for (int i=0; i<na; i++) {
        scanf("%d", &a[i]);
    }
    
    scanf("%d", &nb);
    vector<int> b(nb);
    
    for (int i=0; i<nb; i++) {
        scanf("%d", &b[i]);
    }

    int ia = 0, ib = 0;
    
    int idx = 0;
    int mid = (na + nb) / 2;
    
    int mv = 0, mv2;
    while (ia < na && ib < nb && idx < mid) {
        if (a[ia] <= b[ib]) {
            mv = a[ia];
            ia++;
        } else {
            mv = b[ib];
            ib++;
        }
        idx++;
    }

    while (ia < na && idx < mid) {
        mv = a[ia];
        ia++;
        idx++;
    }
    
    while (ib < nb && idx < mid) {
        mv = b[ia];
        ib++;
        idx++;
    }

    if (ia < na && ib < nb) {
        mv2 = min(a[ia], b[ib]);
    } else if (ia < na) {
        mv2 = a[ia];
    } else if (ib < nb) {
        mv2 = b[ib];
    }
    
    if ((na + nb) & 1) {
        // odd
        cout<<mv2<<endl;
    } else {
        // even
        cout<<mv<<endl;
    }

    system("pause");
    return 0;
}

 log(na+nb)算法见:http://www.cnblogs.com/lailailai/p/3982103.html

原文地址:https://www.cnblogs.com/lailailai/p/4326192.html