2 个不同长度的排序数组的中值

2024-04-06

如何找到长度分别为 m 和 n 的 2 个已排序数组 A 和 B 的中位数? 我已经搜索过,但大多数算法都假设两个数组的大小相同。我想知道如果 m != n 我们怎样才能找到中位数 考虑例子, A={1, 3, 5, 7, 11, 15} 其中 m = 6, B={2, 4, 8, 12, 14} 其中 n = 5 中位数是 7

任何帮助表示赞赏。 我正在准备面试,现在正在努力解决这个算法。


这是求两个长度不等的排序数组的中位数的JAVA代码

package FindMedianBetween2SortedArraysOfUnequalLength;

import java.util.Arrays;
import java.util.Scanner;

public class UsingKthSmallestElementLogic {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    try{
        System.out.println("Enter the number of elements in the first SORTED array");
        int n = in.nextInt();
        int[] array1 = new int[n];
        System.out.println("Enter the elements of the first SORTED array");
        for(int i=0;i<n;i++)
            array1[i]=in.nextInt();
        System.out.println("Enter the number of elements in the second SORTED array");
        int m = in.nextInt();
        int[] array2 = new int[m];
        System.out.println("Enter the elements of the second SORTED array");
        for(int i=0;i<m;i++)
            array2[i]=in.nextInt();
        System.out.println("Median of the two SORTED arrays is: "+findMedian(array1,array2,array1.length,array2.length));
    }
    finally{
        in.close();
    }
}
private static int findMedian(int[] a, int[] b,
        int aLength, int bLength) { 

    int left = (aLength+bLength+1)>>1;
    int right = (aLength+bLength+2)>>1;
    return ((findKthSmallestElement(a,b,a.length,b.length,left)+findKthSmallestElement(a,b,a.length,b.length,right))/2);
}
private static int findKthSmallestElement(int[] a, int[] b,
        int aLength, int bLength, int k) {                    // All the 5 parameters passed are VERY VERY IMP

    /* to maintain uniformity, we will assume that size_a is smaller than size_b
    else we will swap array in call :) */
    if(aLength>bLength)
        return findKthSmallestElement(b, a, bLength, aLength, k);

    /* We have TWO BASE CASES
     * Now case when size of smaller array is 0 i.e there is no elemt in one array*/
    //BASE CASE 1. If the smallest array length is 0
    if(aLength == 0 && bLength > 0)
            return b[k-1]; // due to zero based index

    /* case where k==1 that means we have hit limit */
    //BASE CASE 2. If k==1
    if(k==1)
            return Math.min(a[0], b[0]);

    /* Now the divide and conquer part */
    int i =  Math.min(aLength, k/2) ; // k should be less than the size of array  
    int j =  Math.min(bLength, k/2) ; // k should be less than the size of array  

    if(a[i-1] > b[j-1])
            // Now we need to find only K-j th element
            return findKthSmallestElement(a, Arrays.copyOfRange(b, j, b.length), a.length, b.length -j, k-j);
    else
            return findKthSmallestElement(Arrays.copyOfRange(a, i, a.length), b, a.length-i, b.length,  k-i);
}
}
/*
Analysis:
    Time Complexity = O(log(n+m))
    Space Complexity = O(1)*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2 个不同长度的排序数组的中值 的相关文章

  • 查找数组中的 K 个最小值(堆 vs QuickSelect)

    假设我们有一个数组 我们希望找到它的 K 个最小值 有两种方法 1 使用快速选择算法 O n 时间复杂度和O 1 空间 2 使用最小堆数据结构 O NlogK 时间复杂度和O K 空间 我想知道什么时候一个比另一个更受青睐 我想这两个都可以
  • 使用线程反转字符串

    最近 在一次面试中 我被要求使用线程实现一个字符串反转功能 我想出了下面解决方案的大部分内容 被选中与否是另一回事 我尝试在运行 Windows 8 Consumer Preview 的家用电脑上运行以下解决方案 编译器是VC11 Beta
  • Jquery:获取数字数组中的最大值[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 使用jquery 如何获得数组或数字
  • 将所有 mysql 选定的行放入数组中

    我想知道 php 中是否有一个函数可以允许我将所有选定的数据放入一个数组中 目前我正在使用 mysql fetch array 正如我在手册中读到的那样 该函数不会获取表中的每条记录 result mysql query SELECT FR
  • 按第二个值对二维数组进行排序

    好吧 假设我有一个像 z 1 d 3 e 2 这样的数组 如何按每个组成数组的第二个元素对该数组进行排序 这样我的数组就会如下所示 z 1 e 2 d 3 arr z 1 d 3 e 2 arr sort a b a 1 lt gt b 1
  • 如何将数据存储在对象的对象列表中?

    我有以下代码 将年龄相同且得分最高的用户分组 我现在有而不是Map
  • 如何在 Perl 中序列化数组引用数组?

    Perl 有很多用于序列化数据的模块 我不知道该选择哪一个 我需要将以下数据序列化为字符串 以便将其放入数据库中 my categories Education Higher Education Colleges Schooling Col
  • 将数组分配给结构体中的数组

    我正在尝试将一个数组分配给 typedef 结构的一个字段 但实际上找不到一种方法 我已经搜索过这个问题 但我似乎找到的只是 char 数组的答案 这不是我正在寻找的 我只是试图将一个数组分配给一个 int 数组 并寻找一种实用的方法下面的
  • 在 React 中使用“ref”作为数组

    当我尝试使用 Redux 在 React 中将输入引用为数组时 我遇到了一些问题 下面的代码将数组中的每一篇文章映射一个面板 var articles this props item array articles map article i
  • 网络抓取未知数据结构(JSON、嵌套列表或其他什么?)

    我构建了一个网络抓取工具this https campus datacamp com courses intro to python for data science chapter 1 python basics该页面取决于将字符串解析为
  • 在 Ruby 中测试重叠数组

    假设我有一个 Ruby 数组数组 100 300 400 500 我正在通过添加连续的 CSV 数据行来构建它 添加新子数组时 测试子数组中两个数字覆盖的范围是否被任何先前的子数组覆盖的最佳方法是什么 换句话说 在上面的示例中 每个子阵列都
  • 是否有可能比 O(n log n) 更好地计算数字列表的中位数?

    我知道可以在 O n 中计算数字列表的平均值 但是中位数呢 有没有比排序 O n log n 和查找中间元素 或者如果列表中有偶数个项目则两个中间元素的平均值 更好的算法 是的 您可以在 O n 时间内 确定性地 完成此操作 http ww
  • 有效地将相似的数字分组在一起[重复]

    这个问题在这里已经有答案了 可能的重复 一维数数组聚类 https stackoverflow com questions 11513484 1d number array clustering 我有一个数字数组 例如 1 20 300 4
  • 按列对 3d 数组中的行数据进行分组,并合并每组中的子数组数据

    我有一个下面提到的数组 array array 0 gt array names gt array 0 gt Apple group gt 1 1 gt array names gt array 0 gt Mango group gt 1
  • 如何从 php 中的值数组中对特定字符串进行排序?

    array array 2011 September 38 2011 June 4 2010 November 9 2011 November 29 2010 December 19 我想按如下方式对这个数组字符串进行排序 它应该首先对年份
  • 如何按布尔值对数组进行排序

    我有一个看起来像这样的数组 array array foo gt true array foo gt false array foo gt true array foo gt true array foo gt false 有没有一种简单的
  • JS中的递归排序

    在一次采访中 我被要求编写一个程序 算法来使用递归对数字数组进行排序 虽然我含糊地回答了它 但我尝试并想出了以下代码 您可以使用以下JSFiddle https jsfiddle net RajeshDixit 2u9mLegv 1 链接来
  • 如何将 NaN 数组插入 numpy 二维数组

    我试图在二维数组中的特定位置插入任意数量的 NaN 值行 我正在将来自微控制器的一些数据记录在 csv 文件中并使用 python 进行解析 数据存储在 3 列 2D 数组中 如下所示 122 0 1 0 47 0 123 0 1 0 47
  • 如何将java数组列表转换为javascript数组? [复制]

    这个问题在这里已经有答案了 我们如何将 String 对象的 java arraylist 转换为 javascript 数组 这就是我正在做的事情 但我正在寻找更好的方法来做到这一点 我不想迭代数组列表 var myArray
  • JS 中的展开/休息运算符如何工作? [复制]

    这个问题在这里已经有答案了 我正在努力完全理解扩展 休息运算符在 JS 中的工作原理 我已经阅读了 MDN 文档 但我仍然不完全清楚 我在下面提供了一个示例 我在其中使用了它并且它按预期工作 const users name Samir a

随机推荐

  • Starlette 的 url_for 不会在 Nginx 后面创建带有 https 方案的链接(通过 uvicorn)

    我已经尝试了一切 斯塔莱特 routes Mount static StaticFiles directory parent fs decoration fs static name static Route Route Uvicorn f
  • 在单周期数据路径中加载半字和加载字节

    有人询问如何在单周期数据路径中实现加载字节而无需更改数据存储器 解决方案如下 替代文本 http img214 imageshack us img214 7107 99897101 jpg http img214 imageshack us
  • 在 Bootstrap 网格中动态更改列数

    我正在尝试为桌面浏览器设计一个布局 并为平板电脑浏览器设计其他布局 我希望在桌面浏览器中看到 3 9 列 3 列用于侧边栏 9 列用于内容 以及平板电脑中的 12 列 仅内容 我不需要平板电脑中的侧边栏 因此我需要在这种情况下显示液体内容
  • 拥有带有路径的地图如何将其与给定路径进行比较?

    我们有到字符串对的升压路径映射 例如名称 位置 绝对位置路径a lausr myfolder 我们得到了一些位置a lausr myfolder mysubfolder myfile 如何找到哪个地图位置最适合给定的网址 例如 我们有一张地
  • 嵌套列表中元素的 Python SUMPRODUCT

    我有两个嵌套列表 a 1 2 3 2 4 2 b 5 5 5 1 1 1 我想将每组元素相乘并求和得到 c 30 8 哪个结果来自 1 5 2 5 3 5 2 1 4 1 2 1 我尝试过这样做 c sum x y for x y in z
  • Play 重新加载应用程序时出现奇怪的 MongoError(使用 ReactiveMongo)

    通常 当 Play 在代码更改后重新加载应用程序时 我会收到以下错误 MongoError 无法到达节点集 请检查您的网络 连接性 MongoDB 日志如下所示 2016 09 06T18 51 22 609 0200 I NETWORK
  • 使用 Python 了解 Open CV 中的椭圆参数

    我正在尝试使用 Open CV 绘制圆弧 使用 cv2 ellipse 函数 我尝试阅读相同的文档 但我发现它非常令人困惑 在我的例子中它是一个圆弧 所以axes x和axes y是相同的 即半径 我的轴应该是什么 我应该在哪个方向计算开始
  • 嵌套 Linq Min() 使 Visual Studio 崩溃

    我有一段代码使 Visual Studio 2008 IDE 运行速度非常慢 消耗大量内存 最终导致其崩溃 我怀疑 VS 达到了操作系统内存限制 以下代码不是我的真实应用程序代码 但它模拟了问题 本质上 我试图使用 LINQ 找到树中的最小
  • linux下限制R内存使用

    我们在 Linux 集群环境中运行 R 当用户无意中使用 R 进程占用所有内存时 头节点会出现几次挂起 linux下有没有办法限制R内存使用 我不想建议全局 ulimit 但这可能是唯一的出路 There s unix rlimit as
  • $.getJSON 解析器错误尝试调用 API

    我正在尝试使用 Clipped API http clipped me api html http clipped me api html 返回 JSON 但遇到了一些麻烦 我正在使用 getJSON 在 Chrome 的 JS 控制台中我
  • 是否有任何编程语言支持定义原始数据类型的约束?

    昨晚我在想编程语言可以有一个功能 我们应该能够限制分配给原始数据类型的值 例如 我应该可以说我的 int 类型变量只能具有 0 到 100 之间的值 int lt 0 100 gt progress 然后 这将在所有情况下充当普通整数 除非
  • 在Android中使用OpenCV将NV21转换为RGB

    我正在尝试在 Android 中使用 OpenCV 因此 我首先通过并排放置两个 SurfaceView 来测试 OpenCV 其中一个SurfaceView用于预览相机的输出 输出格式显然是NV21 另一个SurfaceView通过Ope
  • 如何在 Jersey 客户端中发送 DELETE 请求中包含的数据?

    我在 Jersey 2 x 中有以下服务器端代码 Path store remove from group DELETE Consumes MediaType APPLICATION FORM URLENCODED Produces Med
  • 自定义会员资格提供商*没有*数据库?

    我一直在寻找有关 MVC 4 中成员资格提供程序更改的各种 SO 问题 博客文章等 虽然我喜欢其中的许多更改和简化 尤其是开箱即用的外部登录 支持 我还无法找到一件看似简单的事情 如何使用使用其他数据源的自定义成员 角色提供者覆盖成员资格
  • 如何从 viewcontainer 角度删除特定视图

    在下面的示例中 https stackblitz com edit angular 1acvol https stackblitz com edit angular 1acvol 我使用创建了多个视图TemplateRef并将它们附加到同一
  • 异步加载车把模板

    我正在尝试编写一个函数 该函数将为我提供一个已编译的车把模板 我将所有模板都放在单独的文件中 使用 ajax 调用来获取模板并编译它以供使用 但我需要使用承诺 以便我可以实际使用它 function getTemplate name get
  • Python,OpenCV:增加图像亮度而不溢出UINT8数组

    我正在尝试增加灰度图像的亮度 cv2 imread 返回一个 numpy 数组 我正在向数组的每个元素添加整数值 从理论上讲 这会增加它们中的每一个 之后我就可以将上限设置为 255 并获得具有更高亮度的图像 这是代码 grey cv2 i
  • 连接建立后如何从服务器(使用连接列表)向客户端发送命令?

    我有这两个类 它们是我的服务器应用程序 桌面 的一部分 需要在建立连接后将命令发送回客户端 当我尝试这样做时 clients i Send info the Send 例行公事 的监听器 cs 可以访问 但我有以下语法错误 怎么解决这个问题
  • CSS 关键帧动画与平移变换在 IE 10 和 Firefox 中捕捉到整个像素

    看起来 IE 10 和 Firefox 在使用 css 关键帧动画中的平移 2d 变换对元素的位置进行动画处理时 都会将元素捕捉到整个像素 Chrome 和 Safari 没有 看起来a lot制作微妙运动动画时效果更好 动画是通过以下方式
  • 2 个不同长度的排序数组的中值

    如何找到长度分别为 m 和 n 的 2 个已排序数组 A 和 B 的中位数 我已经搜索过 但大多数算法都假设两个数组的大小相同 我想知道如果 m n 我们怎样才能找到中位数 考虑例子 A 1 3 5 7 11 15 其中 m 6 B 2 4