7-53 两个有序序列的中位数 (25 point(s))

传送门
没啥好说的
有序数组的中位数:如果下标从0开始,中位数是(n-1)/2,或者n-1>>1,位运算不用加括号.

#include<iostream>
using namespace std;
const int N=1e5+10;
int q1[N],q2[N],q[N<<1],cnt1,cnt2,cnt;
int main()
{
    
    
	int n;
	cin>>n;
	for(int i=0;i<n;i++)cin>>q1[i];
	for(int i=0;i<n;i++)cin>>q2[i];
	if(n==0)
		printf("NULL");
	else 
	{
    
    
		int i=0,j=0;
		while(i!=n&&j!=n)
		{
    
    
			if(q1[i]<q2[j])	q[cnt++]=q1[i++];
			else q[cnt++]=q2[j++];
		}	
		while(i!=n)q[cnt++]=q1[i++];
		while(j!=n)q[cnt++]=q2[j++];
		printf("%d",q[cnt-1>>1]);
	}	
} 

猜你喜欢

转载自blog.csdn.net/weixin_49640089/article/details/114702603