博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM题目————中位数
阅读量:5115 次
发布时间:2019-06-13

本文共 1393 字,大约阅读时间需要 4 分钟。

题目描述

长为L的升序序列S,S[L / 2]为其中位数。

给出两个等长升序序列S1和S2,求两序列合并并排序后的中位数。

输入

多组数据,每组第一行为n,表示两个等长升序序列的长度。

接下来n行为升序序列S1的元素,再接下来n行为升序序列S2的元素。

1 <= n <= 10 ^ 5,S内容为整数。

不超过5组数据。

输出

每组数据,输出合并并排序后的序列的中位数。

样例输入

51113151719246820

样例输出

11

 本来以为是可以直接排序过,但是没想到数据卡的太死。唉!还是太年轻啊!

//用二分的思想,直接递归求中位数#include 
const int MAX = 100005 ;int a[MAX], b[MAX], n; int get_middle_number(int a[], int b[], int n){ int start1 = 0, end1 = n-1, m1; int start2 = 0, end2 = n-1, m2; while (start1 != end1 || start2 != end2) { m1 = (start1 + end1) / 2; m2 = (start2 + end2) / 2; if (a[m1] == b[m2]) return a[m1]; if (a[m1] < b[m2]) { if ((start1+end1) % 2 == 0) { start1 = m1; end2 = m2; } else { start1 = m1 + 1; end2 = m2; } } else { if ((start1+end1) % 2 == 0) { end1 = m1; start2 = m2; } else { end1 = m1; start2 = m2 + 1; } } } return a[start1] < b[start2] ? a[start1] : b[start2];} int main(){ char str[10]; while(scanf("%d",&n)!=EOF) { int count1 = 0, flag = 0, k=0; for(int i=0; i

 

转载于:https://www.cnblogs.com/Asimple/p/5495242.html

你可能感兴趣的文章
java SE :标准输入/输出
查看>>
一些方便系统诊断的bash函数
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
微信小程序-发起 HTTPS 请求
查看>>
WPF动画设置1(转)
查看>>
基于node/mongo的App Docker化测试环境搭建
查看>>
秒杀9种排序算法(JavaScript版)
查看>>
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
Java 多态 虚方法
查看>>
万能的SQLHelper帮助类
查看>>
tmux的简单快捷键
查看>>