求两个升序序列的中位数( 减治法)

BJFU_数据结构习题_237求解两个升序序列的中位数 237求解两个升序序列的中位数 描述 一个长度为L(L≥1)的升序序列S,处在第L/2(若为小数则去掉小数后加1)个位置的数称为S的中位数。例如,若序列S1=(11,13,15,17,19),则S1的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现有两个等长升序序列A和B,试实现一个在时间和空间两方面都尽可能高... 阅读详情

题目:

一个长度为L(L≥1)的升序序列S,处在第L/2(若为小数则去掉小数后加1)个位置的数称为S的中位数。例如,若序列S1=(11,13,15,17,19),则S1的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现有两个等长升序序列A和B,试实现一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。
 

解题图解:

 代码:

public class SearchMid {
    public static void main(String[] args) {
        int arr1[] = {11, 13, 15, 17, 19};
        int arr2[] = {2, 4, 6, 8, 20};

        System.out.println("中位数:"+searchMid(arr1, arr2, arr1.length - 1));

    }

    private static int searchMid(int[] arr1, int[] arr2, int n) {
        int start1 = 0, start2 = 0, end1 = n, end2 = n, mid1 = 0, mid2 = 0;


        while (end1 > start1 && end2 > start2) {
            mid1 = (start1 + end1) / 2;
            mid2 = (start2 + end2) / 2;


            if (arr1[mid1] == arr2[mid2]) {
                return arr1[mid1];
            }
            if (arr1[mid1] < arr2[mid2]) {
//                if ((end1-start1)%2==0){
//                    start1=mid1;
//                }
//                else{
//                    start1=mid1+1;
//                }

                start1 = (end1 - start1) % 2 == 0 ? mid1 : mid1 + 1;
                end2 = mid2;
            } else {
                end1 = mid1;
                start2 = (end2 - start2) % 2 == 0 ? mid2 : mid2 + 1;
//                if ((end2-start2)%2==0){
//                    start2=mid2;
//                }
//                else {
//                    start2=mid2+1;
//                }


            }


        }

        return arr1[start1] > arr2[start2] ? arr2[start2] : arr1[start1];

//        if (arr1[start1]>arr2[start2]){
//            return arr2[start2];
//        }
//        else  return arr1[start1];


    }


}

求两个升序序列的中位数 1.等长序列 题目来源于王道考研数据结构书 一个长度为L(L≥1)的升序序列S,处在第 ⌈L/2 ⌉ 个位置的数称为S的中位数。例如,若序列S1=(11,13, 15,17, 19), 则S1 的中位数是15,两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2= (2, 4, 6, 8, 20), 则S1和S2的中位数是11。现在有两个等长升序序列A和B,试设计一个在时间和空间两方... 阅读详情

相关推荐

东方博宜OJ(1233)排序问题——求中位数(又是冒泡排序!)

【代码】东方博宜OJ(1233)排序问题——求中位数(又是冒泡排序!)

StephenRay的博客 1324

【寻找中位数】(寻找中位数)一个长度为L(L≥1)的升序序列S,处在第L/2(若为小数则去掉小数后加1)个位置的数称为S的中位数。

注:此方法能写出归并排序算法再查找n/2处寻找中位数即可。太费时间简单搞一下!

weixin_45753504的博客 1207

一次求两序列中位数分治算法探索历程

如今博主在上算法设计与分析这门课,前两天刚讲到了分治法。 下面照搬一下教材《算法设计与分析》(第2版,王红梅、胡明 编著)分治法的设计思想概述。 分治者,分而治之也。 分治法(divide and conquer method)将一个难以直接解决的发问题划分成一些规模较小的子问题,分别求解各个子问题,再合并子问题的解得到原问题的解。一般来说,分治法的求解过程由以下三个阶段组成: 划分:把规模为

浅笑哥fight的博客 2859

每日一题Day35

求解两个升序序列的中位数 描述 一个长度为L(L≥1)的升序序列S,处在第L/2(若为小数则去掉小数后加1)个位置的数称为S的中位数。例如,若序列S1=(11,13,15,17,19),则S1的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现有两个等长升序序列A和B,试实现一个在时间和空间两方面都尽可能高效...

ZLambert的博客 1732

两个序列的中位数

现有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列的中位数。

JavaFx之集成FontAwesomeFX与JFoenix(十五)

本文详细介绍了如何在JavaFx项目中同时集成JFoenix和FontAwesomeFX,以创建现代化、美观的桌面应用界面。通过Maven依赖配置、动态代码创建和FXML静态声明两种方式,演示了如何将JFoenix的Material Design控件与FontAwesomeFX的丰富矢量图标完美结合,并提供了实战案例展示如何构建一个功能完善的现代化工具栏。

pepsi的博客 437

2011考研题:求两个等长升序序列的中位数 ← 减治法

求两个等长升序序列的中位数 ← 减治法

hnjzsyjyj的专栏 812

八股已死、场景当立(Docker篇)

本文总结了Docker相关的面试八股文,重点介绍了Docker在Java开发中的应用。主要内容包括:Docker容器与虚拟机的区别及其对Java应用性能的影响;如何为Java应用构建优化镜像;Docker常用命令在Java容器管理中的使用;Docker网络模式与数据卷在Java微服务中的配置;使用Docker Compose部署Java+MySQL微服务的方法;以及为Java应用配置健康检查的重要性。文章还通过具体示例说明了Nginx容器挂载、日志收集等常见场景的实现方式,为Java开发者提供了实用的Doc

qq_55253420的博客 714

算法设计与分析——两个序列的中位数(Java)

例如,对于两个给定的序列 A={11,13,15,17,19},B={2,4,10,15,20},求序列 A 和 B 的中位数的过程如下表所示,在求解过程中注意保持两个序列的长度相等。ab,则中位数只能出现在 b 和 a 之间,在序列 A 中舍弃 a 之后的元素得到序列 A1,在序列 B 中舍弃 b 之前的元素得到序列 B1。

qq_53709454的博客 2536

DIY压电陶瓷传感器信号放大:从拆解到JFET电路实战(附示波器实测数据)

本文详细介绍了如何利用废旧设备拆解的压电陶瓷片,结合JFET(结型场效应管)高输入阻抗特性,DIY搭建高灵敏度振动传感器放大电路。从元件拆解、参数实测到JFET共源极放大器实战搭建与调试,提供了完整的步骤、示波器实测数据及优化方案,帮助电子爱好者实现低功耗振动检测应用。

weixin_29195615的博客 386

优雅谈大模型:“System2”与“System 1”

研究人员探索了三种System 2方法——RaR、S2A 和 BSM,这些方法已经成功提炼到新的LLM,这个新的模型与System 1相比,产生了更好的结果,而且成本低于System 2。然而这种方法是有局限性,只能适用于特定的任务。

鲁班模锤 5144

数据结构——顺序表习题解(II)

7.已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3,…,am)和(b1,b2,b3…,bn)。编写一个函数,将数组中两个顺序表位置互换,即将(b1,b2,b3…,bn)放在(a1,a2,a3,…,am)之前。 思路:先将(a1,a2,a3,…am,b1,b2…bn)整体先转置 得到(bn, bn-1,bn-2,…am,am-1,…a1) 然后分别转置(bn,bn-1,bn-2,…b1)和(am,am-1…a1) #include <iostream> using namespa

weixin_42313342的博客 3480

Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线

之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲到使用WidgetComponent和3DUI进行交互。然而,这种方法存在一个问题:为了让射线可视化,我们需要勾选“调试/显示调试”,这样才能在手柄上看到代表其指向的一条红色射线。但最关键的问题是,这个显示调试信息的功能只属于Debug调试模式,也就是说,一旦将项目正式打包发布,这条射线辅助线就没有了。如下图所示:我就觉得Unreal官方真的是有点过分了,这不应该是最基本的功能么?难道我们VR要在Debug模式下发布?

TxNet 1611

两个序列的中位数 —— 减治法

分治法是把一个大问题划分为若干个子问题,分别求解各个子问题,然后再把子问题的解进行合并得到原问题的解。 减治法同样是把一个大问题划分为若干个子问题,但是这些子问题不需要分别求解,只需求解其中的一个子问题,因而也无需对子问题的解进行合并。 问题描述: 一个长度为n(n≥1)的升序序列S,处在第n/2个位置的数称为序列S的中位数(median number),例如,序列S1={11,13,15,17,19}的中位数是15。两个序列的中位数是它们所有元素的升序序列的中位数,例如,S2={2,4,6,8,20}.

枯木何日可逢春 2639

uniapp - H5人脸识别认证与活体检测功能(纯前端免费方案+微信sdk人脸识别)完整源码,微信公众号网页/h5端人脸识别功能人脸核身(微信方案提供后端spring boot+thinkphp源码

uniapp实现人脸认证,uniAPP h5手机拍照+人脸识别,免费人脸识别插件,前端人脸识别解决方案,uniapp H5人脸识别带前后摄像头,人脸识别在H5页面进行采集,微信公众号H5人脸核身,H5端人脸识别功能实现,免费h5人脸识别插件方案,微信公众号H5网页实现人脸识别,uniapp人脸监测,uniapp人脸生物监测,使用uniapp开发H5人脸采集功能/人脸识别功能,uniapp项目—h5端人脸采集功能实现,uniapp vue3人脸核身,H5活体检测认证,人脸认证张嘴摇摇头指引动作,人脸核身 微信

🏆 前端领域优质创作者 3808

Windows 上 openclaw onboard --install-daemon 命令的安装位置和启动配置

摘要:Windows系统中,执行openclaw-cnonboard--install-daemon命令会创建计划任务OpenClawGateway,该任务在用户登录时自动运行位于%USERPROFILE%.openclaw\gateway.cmd的脚本文件来启动服务。管理方法包括通过任务计划程序或命令行(schtasks)查看/启停任务,使用openclaw gateway命令操作服务,或通过删除计划任务和脚本文件完全卸载服务。该机制确保OpenClawGateway服务随系统登录自动启动。(149字)

大坡3D软件开发 1369

两个序列的中位数(超详细的讲解)

问题描述:在两个等长的升序序列中找到两个序列的中位数,设s序列的长度为n(n>=1),称n/2个位置的数为s的中位数 我在这里简单分享下自己对这道题的看法。暴力法这里不谈了,仅仅谈谈教材上的减治法思路,并且是如何实现出bug free的代码,而不会类似于二分查找那样陷入死循环!(下面的=究竟是赋值还是判定相等关系自行判断) 教材上的算法思路 分别求出两个序列的中位数,记为a和b;比较a和b,有下列三种情况: ① a = b:则a即为两个序列的中位数; ② a < b:则中位数只能出现

weixin_40564024的博客 5153

UMI——斯坦福刷盘机器人:通过手持夹爪革新数据收集方式,且使用视觉SLAM和Diffusion Policy预测动作

没想到今年年初的斯坦福mobilealoha的热度刚过,而到今年2月的下旬,斯坦福另一个团队又推出了UMI刷盘机器人,且这两个团队还互相认识、还在一块共同切磋(顺带小小感叹一下,斯坦福的氛围是真好而且真高产)斯坦福UMI刷盘机器人其与mobile aloha(以及AirExo: Low-Cost Exoskeletons for Learning Whole-Arm Manipulation in the Wild)最大的不同在于其收集数据处理的非真实的机器人,而是一个手持夹持器(从而大幅降低成本)

u013250861的博客 1357

减治法以及减治法的两个例子(两个序列的中位数;二叉查找树)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、减治法是什么以及减治法和分治法的区别?二、例子1.两个序列的中位数2.二叉查找树总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、减治法是什么以及减治法和分治法的区别? 分治法是把一个大问题划分为若干个子问题,分别求解各个子问题,然后再把子问题的解进行合并得到原问题的解。 减治法同样是把一个大问题划分为若干个子问题,但是这些子问题不需要分别求解,只需求解其中的一个子问题,因而也无需对子问题的解进行合并。 所以,严格的.

m0_55486529的博客 1134

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

减治法——基础篇

减治法问题1 1 、减治法的设计思想: 1) 原问题的解只存在于其中一个较小规模的子问题中; (2) 原问题的解与其中一个较小规模的解之间存在某种确定的对应关系。 2、应用减治法(例如减半法)得到的算法通常具有如下递推式: 3、举一个简单的例子:两个序列的中位数 问题描述:一个长度为n(n≥1)的升序序列S,处在第n/2个位置的数称为序列S的中位数 。两个序列的中位数是他们所有...

Kun_112114的博客 2581

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

查找两个有序序列的中位数

查找两个有序序列的中位数 举例:序列A(2,4,6,8,20),序列B(11,13,15,17,19) 第一种方法: 可以先把两个有序表合并排列,之后查找中位数,由于我们只需要查看其第(2n-1)/2个元素,故只需要排列好前(2n-1)/2-1个元素,然后返回此时两个序列中的较小值,时间复杂度o(n) int seach2(int arr1[],int arr2[],int n) {//n表示单个...

F13253524870的博客 2183

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

DHU数据结构-顺序表- ADT应用-找出两个等长升序序列的中位数

目录 1.题目 2.题解 3.代码实现 1.题目 顺序表ADT模板简单应用算法设计:找出两个等长升序序列的中位数 作者:教材时间限制:1S章节:DS:线性表 问题描述 : 目的:使用自行设计的顺序表ADT或STL的vector模板设计并实现顺序表应用场合的一些简单算法设计。 应用7:一个长度为L(L>=1)的升序序列S,处在第[L/2]个位置的元素称为S的中位数。例如,若序列S1 = (11,13,15,17,19),则S1的中位数为15。两个序列的中位数是含它...

m0_49843646的博客 971

减治算法——两个序列的中位数

这种算法与分治算法类似,分治法是把一个大问题分成若干个子问题,分别求解各个子问题,然后再把子问题的解进行合并得到原问题的解。而剪枝法同样是把一个大问题划分成为若干个子问题,但是这些子问题不需要分别求解,只需要求解其中一个子问题,所以也不需要对子问题的解进行合并。所以严格的说减治法是一种退化了的分治法。 问题: 规定一个长度为n(n>=1)的升序序列S,处在第n/2个位置的数称为序列S的中位数,例如,序列S1={11,13,15,17,19}的中位数是15.两个序列的中位数是他们所有元素的升序序列的

weixin_45927758的博客 2025

求解两个升序序列的中位数 减治法

求解两个升序序列的中位数 描述 一个长度为L(L≥1)的升序序列S,处在第L/2(若为小数则去掉小数后加1)个位置的数称为S的中位数。例如,若序列S1=(11,13,15,17,19),则S1的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现有两个等长升序序列A和B,试实现一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。 输入 多组数据,每组数据有三行,第一行为序列的长度n,第二行为

m0_53354306的博客 349

【算法】减治法详解

左子树上的结点都小于根节点、所有右子树都大于根节点使用中序遍历可以得到一个递增的有序序列。

weixin_45434953的博客 4860

减治法——9月24日课堂知识小结(上)

分治法是将大问题划分为若干小问题,逐一求解,将子问题的解合并得到原问题的解。减治法也将一个大问题细分,但不需要分别求解,只需求出其中一个子问题。

3DbabyDuck的博客 587
上一篇: 最大字段和(分治法,递归,Java)
下一篇: 2.1.1计算机网络(奈氏准则 香农定理 码元 速率 波特 带宽 物理层概念 通信方式 传输方式)
热爱编程的小白白
热爱编程的小白白 新星计划导师 新星计划导师
博客等级 码龄5年 11万+粉丝 243原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱编程的小白白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值