zoukankan      html  css  js  c++  java
  • 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)\)
  • 相关阅读:
    计算机科学中最重要的32个算法
    趣事
    深度学习迷你地图
    物理学
    代数几何
    Node.js 文件系统
    Node.js 常用工具util包
    Node.js 全局对象
    favi.icon是什么?
    Node.js 路由
  • 原文地址:https://www.cnblogs.com/wdt1/p/13685801.html
Copyright © 2011-2022 走看看