• 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

  • 相关阅读:
    判断一个数是否为素数的方法
    什么是算法?
    table 表格
    状态模式
    设计模式
    观察者模式
    async函数
    JS单线程和异步
    ES6 --- Promise
    浅析flex 布局
  • 原文地址:https://www.cnblogs.com/lailailai/p/4326192.html
Copyright © 2020-2023  润新知