两个序列的中位数(双指针)

简介: 两个序列的中位数(双指针)

一个长度为n(n⩾1)的升序序列S,处在第2n个位置的数称为序列S的中位数(median number),例如,序列S1={10,13,14,16,18,19}的中位数是14。两个序列的中位数是它们所有元素的升序序列的中位数,例如,S2={2,4,8,9,20,21},则S1和S2的中位数是13。现有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列的中位数。


输入格式:

输入在三行进行,第一行1个非负整数N,表示两个数列的长度,第二行和第三行,每行N个非负整数,数与数之间用空格间隔。


输出格式:

在一行内输出一个整数。


输入样例:

1. 6
2. 8 11 14 15 17 19
3. 2 4 6 9 10 12


输出样例:

10


#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n, x;
    vector<int>ans;
    scanf("%d", &n);
    for (int i = 0; i < 2 * n; i ++ )
    {
        scanf("%d", &x);
        ans.push_back(x);
    }
    int l1 = 0, l2 = n;
    for (int i = 1; i < n; i ++ )
    {
        if(ans[l1] < ans[l2]) l1 ++;
        else l2 ++;
    }
    if(ans[l1] < ans[l2]) printf("%d", ans[l1]);
    else printf("%d", ans[l2]);
    return 0;
}
目录
相关文章
|
7月前
|
算法 C++
【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目
【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目
|
算法 测试技术 C#
C++前缀和算法的应用:统计中位数为 K 的子数组
C++前缀和算法的应用:统计中位数为 K 的子数组
|
7月前
|
算法 测试技术 C#
【折半处理 二分查找】1755. 最接近目标值的子序列和
【折半处理 二分查找】1755. 最接近目标值的子序列和
【折半处理 二分查找】1755. 最接近目标值的子序列和
|
7月前
|
机器学习/深度学习 算法 测试技术
【线段树】【区间更新】2916. 子数组不同元素数目的平方和 II
【线段树】【区间更新】2916. 子数组不同元素数目的平方和 II
【线段树】【区间更新】2916. 子数组不同元素数目的平方和 II
|
7月前
|
算法 测试技术 C#
【二分查找】【双指针】LeetCode:2565最少得分子序列
【二分查找】【双指针】LeetCode:2565最少得分子序列
|
7月前
|
算法 安全 C#
Leetcode算法系列| 4. 寻找两个正序数组的中位数
Leetcode算法系列| 4. 寻找两个正序数组的中位数
|
7月前
|
算法
回溯-求出数组的所有子序列【学习算法】
回溯-求出数组的所有子序列【学习算法】
50 0
|
算法 测试技术 C++
C++算法:寻找两个正序数组的中位数
C++算法:寻找两个正序数组的中位数
|
人工智能 算法
动态规划之区间一维
噩梦中的仙境:动态规划之区间一维
70 0
动态规划之区间一维
|
Java
寻找两个有序数组的中位数
寻找两个有序数组的中位数
105 0