`

17082 两个有序数序列中找第k小

阅读更多

17082 两个有序数序列中找第k小(必做)

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 编程题   语言: C++;C;VC;JAVA

Description

已知两个已经排好序(非减序)的序列X和Y,其中X的长度为m,Y长度为n,
现在请你用分治算法,找出X和Y的第k小的数,算法时间复杂度为O(max{logm, logn})。

此题请勿采用将序列X和Y合并找第k小的O(m+n)的一般方法,要充分利用X和Y已经排好序的这一特性。




输入格式

第一行有三个数,分别是长度m、长度n和k,中间空格相连(1<=m,n<=100000; 1<=k<=m+n)。
第二行m个数分别是非减序的序列X。第三行n个数分别是非减序的序列Y。



输出格式

序列X和Y的第k小的数。



输入样例

5 6 7
1 8 12 12 21 
4 12 20 22 26 31



输出样例

20

 

#include <iostream>

#include <stdio.h>

#include <algorithm>

using namespace std;

int a[100000],b[100000];

int c[200000];

int m,n,k;

int main()

{

    freopen("in.txt","r",stdin);

    cin >> m>> n>> k;

    for(int i=0; i<m; i++)

        cin >> a[i];

    for(int i=0; i<n; i++)

        cin >>b[i];

    //for(int i=0;i<n+m;i++)

    // cin >>c[i];

    //sort(c,c+n+m);

    //cout << c[k-1] << endl;

    int l=0;

    int i=0,j=0;

    while(i<m||j<n)

    {

 

        if(i>=m&&j<n)

        {

            c[l++]= b[j++];

        }

        else if(j>=n&&i<m)

        {

            c[l++]=a[i++];

        }

        else

        {

            if(a[i]>=b[j])

            {

                c[l++]=b[j++];

            }

            else

            {

                c[l++]=a[i++];

            }

        }

 

    }

 

 

 

    cout <<c[k-1]<<endl;

    return 0;

}

分享到:
评论

相关推荐

    两个有序数序列中找第k小

    已知两个已经排好序(非减序)的序列X和Y,其中X的长度为m,Y长度为n, 现在请你用分治算法,找出X和Y的第k小的数,算法时间复杂度为O(max{logm, logn})。 此题请勿采用将序列X和Y合并找第k小的O(m+n)的一般方法,...

    两个有序数序列中找第k小(必做)

    已知两个已经排好序(非减序)的序列X和Y,其中X的长度为m,Y长度为n, 现在请你用分治算法,找出X和Y的第k小的数,算法时间复杂度为O(max{logm, logn})。

    《剑指Offer》题目及代码.zip

    17. 合并两个有序链表 18. 判断二叉树A中是否包含子树B 19. 二叉树的镜像 20. 顺时针打印矩阵 21. 包含min函数的栈 22. 判断一个栈是否是另一个栈的弹出序列 23. 层序遍历二叉树 24. 后序遍历二叉搜索树 25. ...

    Java面试 Java超级经典100问题 Java高级开发工程师必备 Java面试宝典

    合并两个有序链表18.判断二叉树A中是否包含子树B.19.二叉树的镜像20.顺时针打印矩阵、21.包含min函数的栈.22.判断一个栈是否是另一个栈的弹出序列23.层序遍历二叉树。24.后序遍历二叉搜索树。25.二叉树中和为某值的...

    数据结构题

    15. 若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( ) A. 1,2,3 B. 9,5,2,3 C. 9,5,3 D. 9,4,2,3 16. 对n个记录的文件进行快速...

    全排列——递归排序和字典序列

    全排列算法有两个比较常见的实现:递归排列和字典序排列。 (1)递归实现 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。 (2)字典...

    丢失的最小正整数leetcode-LeetCode:力码

    合并两个有序链表 26 删除排序数组中的重复项 27 移除元素 28 实现strStr 32 最长有效括号 35 搜索插入位置 38 外观数列 41 缺失的第一个正数 53 最大子序列和 58 最后一个单词的长度 63 不同路径 II 66 加一 67 二...

    数据结构与算法.xmind

    递归拆分出两个有序的数组,从mid的位置开始拆分,递归出口:只有一个值的时候就不用拆分了 合并两个有序的数据 分别往两个数组填充已有序的数据 比较两个数组的值谁小,谁小就放到我们的...

    LeetCode解题总结

    6.1 合并两个有序数组到其中一个数组 6.2 合并两个有序链表 6.3 合并K个有序链表 6.4 使用插入排序来排序链表 6.5 归并排序排序链表 6.6 第一个缺少的正数 6.7 排序颜色 7. 查找 7.1 在排序数组中查找数出现的范围 ...

    数据结构实验.rar

    //根据有序判定函数compare,将两个有序表La和Lb归并为一个有序表Lc。 2、(选做题)请实现: (1)升幂多项式的构造,升幂多项式是指多项式的各项按指数升序有序,约定系数不能等于0,指数不能小于0; (2)两个...

    算法笔试题:(Python实现)—— 算法面试题汇总

    算法笔试题:(Python实现)—— 算法...II递增的三元子序列搜索二维矩阵 II除自身以外数组的乘积堆、栈与队列Python实现数组中的第K个最大元素数据流的中位数有序矩阵中第K小的元素前 K 个高频元素滑动窗口最大值基

    计算机二级公共基础知识

    在某些应用中,对线性链表中的每个结点设置两个指针,一个称为左指针,用以指向其前件结点;另一个称为右指针,用以指向其后件结点。这样的表称为双向链表。 在线性链表中,各数据元素结点的存储空间可以是不连续的...

    数据结构内排序源代码

    4、简单选择排序属于不稳定排序,基本思想是,每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小...

    C++实现的归并排序算法详解

    若将两个有序表合并成一个有序表,称为二路归并。 归并过程 1、比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到temp[k]中,并令i和k分别加上1; 2、否则将第二个有序表中的元素a[j]复制到...

    lrucacheleetcode-Leetcode-Questions:面试编码问题

    两个有序数组的中位数 从前序遍历构造二叉搜索树 合并两个排序列表 至少有一个的最左边的列 合并 k 个排序列表 最长回文子串 从排序数组中删除重复项 子阵列总和等于 K 查找排序数组中元素的第一个和最后一个位置 ...

    判断链表是否为回文链表leetcode-Algorithms:Coding_Interviews和Leetcode

    在有序数组中求和为给定值的两个数 判断二叉树是否对称 回文数字判断 判断二叉树是否相等 反转单链表 单身数字 判断单链表是否为回文链表 从尾到头打印链表 求数组中个数最多的数字 判断单链表是否有环 二分搜索 ...

    东大22春《数据结构Ⅱ》在线平时作业3-00001

    1.在待排关键字序列基本有序的前提下,效率最高的排序方法是2.一个具有1025个结点的二叉树的高h为3.已知含10个结点的二叉排序树是一棵完全二叉树,则该二叉排序树在等概率情况下查找成功的平均查找长度等于4.一棵树...

Global site tag (gtag.js) - Google Analytics