两个有序数组的第n大数「建议收藏」

两个有序数组的第n大数

大家好,又见面了,我是全栈君。

两个有序数组,各自含有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;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115644.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SOAP UI 使用

    SOAP UI 使用

    2021年7月2日
    84
  • http请求报400报错

    http请求报400报错400是HTTP的状态码,主要有两种形式:1、badrequest意思是“错误的请求”;2、invalidhostname意思是“不存在的域名”。在ajax请求后台数据时有时会报HTTP400错误-请求无效(Badrequest);出现这个请求无效报错说明请求没有进入到后台服务里;1、确认发送的数据格式是否正确。调试查看你发送的数据格式是否正确或是否有乱码…

    2022年6月12日
    92
  • 缓存穿透,缓存击穿,缓存雪崩解决方案分析

    缓存穿透,缓存击穿,缓存雪崩解决方案分析前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案

    2022年6月30日
    20
  • 求助:为什么登陆不上codelf[通俗易懂]

    求助:为什么登陆不上codelf[通俗易懂]笔记本和手机都能登陆上这个网站,为什么台式电脑就打不开网页了呢?在线求助!!!

    2022年5月31日
    32
  • 关于输入阻抗和输出阻抗的理解是_输入阻抗和输出阻抗

    关于输入阻抗和输出阻抗的理解是_输入阻抗和输出阻抗输入阻抗输入阻抗(inputimpedance)是指一个电路输入端的等效阻抗。在输入端上加上一个电压源U,测量输入端的电流I,则输入阻抗Rin就是U/I。你可以把输入端想象成一个电阻的两端,这个电

    2022年8月5日
    2
  • 系统扩展方式 scale up和scale out

    系统扩展方式 scale up和scale out什么是 scaleup 和 scaleout 许多存储系统开始很简单 但当需要进行系统扩展时就会变得复杂 升级存储系统最常见的原因是需要更多的容量 以支持更多的用户 文件 应用程序或连接的服务器 但是通常 存储系统的升级不只是需要容量 系统还对其他存储资源有额外需求 即带宽和计算能力 如果没有足够的 I O 带宽 将出现用户或服务器的访问瓶颈 没有足够的计算能力 常用的存储软件如快照 复

    2025年7月30日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号