两个有序数组,各自含有n个元素,求第n大的元素

1.顺序遍历两个数组,计数变量k统计出现的第k小元素,时间复杂度为O(n)

代码例如以下:

int getmid(int a[],int b[],int n)
{
int k=0;
int i=0,j=0;
while(i<n&&j<n)
{
if(a[i]<b[j])
{
i++;
k++;
if(k==n)
return a[i-1];
}
else
{
j++;
k++;
if(k==n)
return b[j-1];
}
}
}

2.二分的方法

取A数组的中间元素mid1,取B数组的中间元素mid2,先比較这两个元素的大小。假设这两个元素相等,则直接返回A[mid1],假设A[mid1]<B[mid2],则mid1左側的元素能够去掉,B数组右側的元素能够去掉。这里还要区分数组元素个数为偶数奇数的情况,假设元素个数为偶数,则mid1元素也要去掉。假设A[mid1]<B[mid2]的情况与此类似。时间复杂度为O(logn)

# include <iostream>
# include <cstdlib>
using namespace std; int mid(int a[],int b[],int n)
{
int s1=0,e1=n-1;
int s2=0,e2=n-1;
int mid1=(s1+e1)/2;
int mid2=(s2+e2)/2;
while(s1!=e1||s2!=e2)
{
mid1=(s1+e1)/2;
mid2=(s2+e2)/2;
if(a[mid1]==b[mid2])
{
return a[mid1];
}
if(a[mid1]<b[mid2])
{
if((s1+e1)%2==0)
{
s1=mid1;
e2=mid2;
}
else
{
s1=mid1+1;
e2=mid2;
}
}
else
{
if((s1+e1)%2==0)
{
e1=mid1;
s2=mid2;
}
else
{
e1=mid1;
s2=mid2+1;
}
}
}
return a[s1]<b[s2]? a[s1]:b[s2];
} int main()
{
int a[5]={2,4,5,6,9};
int b[5]={1,3,7,8,10};
cout<<mid(a,b,5)<<endl;
system("pause");
return 0;
}

两个有序数组的第n大数的更多相关文章

  1. 计算两个有序数组的第K大数(转)

    传统解法,最直观的解法是O(m+n).直接merge两个数组,然后求第K大的数字. 如果想要时间复杂度将为O(log(m+n)).我们可以考虑从K入手.如果我们每次能够删除一个一定在第K个元素之前的元 ...

  2. 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays

    一道非常经典的题目,Median of Two Sorted Arrays.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/ ...

  3. 【LeetCode】寻找两个有序数组的中位数【性质分析+二分】

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...

  4. [LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...

  5. 合并两个有序数组a和b到c

    问题:两个有序数组a和b,合并成一个有序数组c. // 合并两个有序数组a和b到c void Merge_Array(int a[], int n, int b[], int m, int c[]) ...

  6. 选取两个有序数组中最大的K个值,降序存入另一个数组中

    原题: 假设有两个有序的整型数组int *a1, int *a2,长度分别为m和n.试用C语言写出一个函数选取两个数组中最大的K个值(K可能大于m+n)写到int *a3中,保持a3降序,并返回a3实 ...

  7. 高效合并两个有序数组(Merge Sorted Array)

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: Y ...

  8. 【递归打卡2】求两个有序数组的第K小数

    [题目] 给定两个有序数组arr1和arr2,已知两个数组的长度分别为 m1 和 m2,求两个数组中的第 K 小数.要求时间复杂度O(log(m1 + m2)). [举例] 例如 arr1 = [1, ...

  9. leetcode刷题四<寻找两个有序数组的中位数>

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...

随机推荐

  1. 24种设计模式--代理模式【Proxy Pattern】

    什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀. ...

  2. dedecms模版制作活动的折叠菜单

    需要做成这种样式 url请求为这样: http://m03.com/plus/list.php?tid=19 这些菜单项都有对应的tid项,页面刷新后,应该将所有的菜单折叠起来,对于tid=19的菜单 ...

  3. uboot总结:uboot配置和启动过程2(mkconfig分析)

    说明:文件位置:在uboot的目录下,文件名为:mkconfig.本身是一个脚本文件. 它的主要作用的是: (1)创建一个重要的符号链接 (2)创建一个config.mk文件(在include目录下) ...

  4. 关于C#的委托

    作者  陈嘉栋(慕容小匹夫) 阅读目录 0x00 前言 0x01 从观察者模式说起 0x02 向Unity3D中的SendMessage和BroadcastMessage说拜拜 0x03 认识回调函数 ...

  5. 【VB】操作ODBC-DAO方式操作只能查询,不能更新插入操作解决。

    最近接手一个改善项目,需要从Access转化到SQL Server 2014,使用原有的ODBC连接方式只能查询,不能更新插入.网上一直找不到解决方案,然后自己测试一下使用ADO方式竟然可以连接了.具 ...

  6. hadoop 2.2.0 eclipse 插件编译 及相关eclipse配置图解

    https://github.com/winghc/hadoop2x-eclipse-plugin 官网 http://kangfoo.github.io/article/2013/12/build- ...

  7. 终端上设置git

    http://blog.163.com/xianfuying@126/blog/static/21960005201181482518631/ 在-/.ssh的位置vi id_rsa.pub 拷贝的时 ...

  8. 快学Scala第一部分

    转载: 1.变量声明 val answer = 8 * 5 + 2; //常量 var counter = 0;    //变量 //在必要的时候 ,可以指定类型 val greeting:Strin ...

  9. Sublime Text 3 配置

    配置: { "font_face": "Source Code Pro", , "highlight_line": true, " ...

  10. Going Home(最小费用最大流)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16200   Accepted: 8283 Description On a ...