两个有序数组的第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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • django的drf_简述django请求生命周期

    django的drf_简述django请求生命周期前言一般我们写完序列化以后,我们就会开始写视图了,drf中我们一般使用CBV的方式,也就是类视图的方式,最基础的我们会使用fromrest_framework.viewsimportAPIVi

    2022年8月7日
    9
  • 像素密度的计算[通俗易懂]

    像素密度的计算[通俗易懂]手机屏幕5.0,指的是手机对角线的长度是5.0英寸,像素是960*1280,则像素密度的计算公式就是960的平方+1280的平方开根号除以5,得到的就是像素密度,一般有120,160,320,480

    2022年6月10日
    68
  • docker 视频网站_springboot前后端分离

    docker 视频网站_springboot前后端分离摘要随着计算机应用技术和网络技术的日新月异,宽带视频点播技术因良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐。这里结合平台开发实例,阐述了基于WEB的在线视频点播网站的软件结构和设计实现。本视频点播系统实现用户信息管理、视频文件的添加、删除、修改及在线播放和搜索功能。由于本系统是一个小型系统,所以我们采用基本的MySQL数据库,易于实现。具体实现中将vue及springboot完美融合,力求界面美观、操作流畅。本文主要论述服务器端视频服务平台的搭建、管理功能的具体实现,以及图形用

    2022年8月21日
    3
  • pip如何卸载包_命令行下载python包

    pip如何卸载包_命令行下载python包Python环境中单独使用pythonsetup.pyinstall安装的python包,可以通过pip命令卸载也可以手动删除安装文件。https://www.cndba.cn/dave/article/3719https://www.cndba.cn/dave/article/37191.Pip卸载:[dave@www.cndba.cndata]$pipuninstallp…

    2022年10月16日
    4
  • SQL中like的用法.[通俗易懂]

    SQL中like的用法.[通俗易懂]Like的运用场合主要在模糊查询的时候,一般以查询字符串居多,这里据一些例子来说他的一般用法:例1,查询name字段中包含有“明”字的。这里不要使用*来代替,一般在使用0个或者任意个字符构成的字符

    2022年7月4日
    30
  • 深入理解MySQL索引之B+Tree

    深入理解MySQL索引之B+Tree首先,正确的创建合适的索引,是提升数据库查询性能的基础。索引是什么?索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。索引的工作机制是怎样的?如上图中,如果现在有一条sql语句select*fromteacherwhereid=101,如果没有索引的条件下,我们要找到这条记录,我们就需要就行全表扫描,匹配id=101的数据。如果有了索引,我们就可以快速…

    2022年6月24日
    25

发表回复

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

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