• b_pat_中位数(巧妙添加一个最大值在数组末尾防止越界)


    输出一个整数,表示两个序列的中位数。
    数据范围
    1≤N≤2×105,
    序列中的整数都在 int 范围内。

    方法一:双指针

    用 c 记录当前遍历的个数;注:由于两个数组A、B的长度都是不同的,可能存在长度较短的B遍历完了,还没有找到中位数的尴尬情况;所以通过再末尾添加一个 LONG_MAX 来让指针继续跑

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int n; cin>>n;
        ll A[n+1]; for (int i=0; i<n; i++) cin>>A[i];
        int m; cin>>m;
        ll B[m+1]; for (int i=0; i<m; i++) cin>>B[i];
        int h=(n+m-1)/2, c=0, i=0, j=0;
        A[n]=LONG_MAX, B[m]=LONG_MAX;
        while (c<h) {
            if (A[i]<B[j]) i++;
            else           j++;
            c++;        
        }
        cout<<(A[i]<B[j] ? A[i] : B[j]);
        return 0;
    }
    

    复杂度分析

    • Time\(O(n)\)
    • Space\(O(1)\)
  • 相关阅读:
    6_java_maven
    线性代数 linear algebra
    hadoop_wordcount_1027
    hadoop_worddistinct_1030
    hadoop_wordcount_1023
    搭建伪分布式_笔记
    linux-sunrpc
    linux-volatile
    linux---asmlinkage
    dqs_linux-1
  • 原文地址:https://www.cnblogs.com/wdt1/p/13685801.html
Copyright © 2020-2023  润新知